《python编程自动上手》笔记2 模式匹配与正则表达式

20190105 qzd


  1. python中所有正则表达式都在re模块中。--> import re

  2. 正则表达式匹配步骤

a. 用 import re 导入正则表达式模块
b. 用 re.compile() 函数创建一个 Regex 对象(记得使用原始字符串)
c. 向 Regrx 对象的 search() 方法传入想查找的字符串。它返回一个Match 对象。
d. 调用 Match 对象的 group() 方法,返回实际匹配文本的字符串。

举个例子:

num = re.complile(r'\d\d\d-\d\d\d-\d\d\d\d')
mo=num.search("My number is 415-555-4242.")
print('phone num found: ' + mo.group())

result --> phone num found: 415-555-4242

  1. 用正则表达式匹配更多模式
    a. 利用括号分组。想要一次就获取所有的分组,使用 groups() 方法。
    b. 用管道( | )匹配多个分组。利用 findall() 方法可以找到“所有”匹配的地方。
    c. 用 ?匹配可选匹配
    d. 用 * 匹配零次或多次
    e. 用 + 匹配一次或多次
    f. 用 {} 匹配特定次数

  2. 贪心和非贪心匹配
    贪心(默认)
    非贪心(后加 ?)
    poython 的正则表达式默认式“贪心”的,这表示在有二义的情况下,它们会尽可能匹配最长的字符串。花括号的“非贪心”版本匹配尽可能最短的字符,即在结束花括号后跟着一个问号。
    注: 问号在正则表达式中可能有两种含义, 声明非贪心匹配或表示可选的分组。

  3. findall() 方法
    a. 如果调用在一个没有没有分组的正则表达式上,例如\d\d\d-\d\d\d-\d\d\d\d, 方法findall() 将返回一个匹配字符串的列表,例如 ['415-555-9999' , '212-555-0000']
    b. 如果调用在一个有分组的正则表达式上,例如 (\d\d\d)-(\d\d\d)-(\d\d\d\d),方法findall() 方法将返回一个字符串的元组列表(每个分组对应一个字符串),例如 [('415','555','1122'),('212','555','0000')]

  4. 字符分类
    \d 0-9的任意数字
    \D 除0-9的数字以外的任何字符
    \w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
    \W 除字母、数字和下划线以外的任何字符
    \s 空格、制表符或换行符(可以认为是匹配“空白”字符)
    \S 除空格、制表符和换行符以外的任何字符

  5. 建立自己的字符分类
    ^ : 通常在字符分类的左括号后加上一个插入字符(^),就可以得到“”非字符类

  6. 插入字符和美元字符
    在正则表达式的开始处使用插入(^),表明匹配必须发生在被查找文本开始处。
    在正则表达式的末尾加上美元符号($),表示该字符串必须以这个正则表达式的模式结束。

  7. 通配符
    在正则表达式中,.(句号)字符称为“通配符”。匹配除了换行之外的所有字符。
    a. 用 点-星(.*) 匹配所有字符,点-星使用“贪心模式”。
    b. 用句点字符匹配换行
    通过传入 re.DOTALL 作为re.compile() 的第二个参数,可以让句点字符匹配所有字符,包括换行符。

  8. 不区分大小写的匹配
    向re.compile() 传入re.IGNORECASE 或 re.I ,作为第二个参数。

  9. 用sub() 方法替换字符串
    Regex对象的 sub() 方法需要传入两个参数。第一个参数是一个字符串,用于取代发现的匹配。第二个参数是一个字符串,用于正则表达式匹配的内容。
    举个例子:

agentname = re.compile(r'Agent (\w) \w*')
agentname.sub(r'\1****' , ' Agent Alice told Agent Carol that Agent Ene knew Agent Bob was a double agent. ')

result: ' A**** told C**** that E**** knew B**** was a double agent.'

  1. 管理复杂的正则表达式
    向 re.compile() 传入参数 re.VERBOSE ,作为第二个参数,忽略正则表达式字符串中的空白符和注释。

  2. 组合使用 re.DOTALL 、re.IGNORECASE 和 re.VERBOSE
    使用管道字符(|)

你可能感兴趣的:(《python编程自动上手》笔记2 模式匹配与正则表达式)