详细介绍常见常用的正则表达式,按照正则表达式模式、正则表达式修饰符和正则表达式函数的顺序介绍。

 

1. 正则表达式模式

1. '.'点号:在普通模式,它匹配除换行符外的任意一个字符;如果指定了 DOTALL 标记(re.S),匹配包括换行符以内的任意一个字符。

2. '^'尖尖号:匹配一个字符串的开始,在 MULTILINE 模式下,也将匹配任意一个新行的开始。

3. '$'美元符号:匹配一个字符串的结尾或者字符串最后面的换行符,在 MULTILINE 模式下,也匹配任意一行的行尾。

4. '*'星号:指定将前面的RE重复0次或者任意多次,而且总是试图尽量多次地匹配。

5. '+'加号:指定将前面的RE重复1次或者任意多次,而且总是试图尽量多次地匹配。

6. '?'问号:指定将前面的RE重复0次或者1次,如果有的话,也尽量匹配1次。

7. *?, +?, ?? :从前面的描述可以看到'*','+'和'?'都是贪婪的,可以在后面加个问号,将策略改为非贪婪,只匹配尽量少的RE。

8. []方括号:用于指定一个字符的集合。可以单独列出字符,也可以用'-'连接起止字符以表示一个范围。例如,常见的,[a-z]匹配任意一个小写字母,[a-zA-Z0-9]匹配任意一个字母或数字。

注意:(1)特殊字符在中括号里将失效。

           (2)另外,如果你要匹配']'或'-'本身,你需要加反斜杆'\'转义,或者是将其置于中括号的最前面,比如[]]可以匹配']'。

           (3)个字符集合可以取反,以匹配任意不在这个字符集合里的字符,取反操作用一个'^'放在集合的最前面表示,放在其他地方的'^'将不会起特殊作用。例如,[^5]将匹配任意不是'5'的字符。

9. '\':反斜杆,转义'*','?'等特殊字符。

10. (...) 圆括号:匹配圆括号里的RE匹配的内容,并指定组的开始和结束位置。注意:组里面的内容可以被提取。

11. {m,n}:m和n都是数字,指定将前面的RE重复m到n次。注意:如果省略m,将匹配0到n个前面的RE;如果省略n,将匹配n到无穷多个前面的RE。

{m,n} 也是贪婪的,a{3,5}如果有5个以上连续a的话,会匹配5个。可以通过加问号'?'改变。例如,a{3,5}?如果可能的话,将只匹配3个a。

 

2. 正则表达式修饰符

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。

re.I

使匹配对大小写不敏感

re.L

做本地化识别(locale-aware)匹配

re.M

多行匹配,影响 ^ 和 $

re.S

使 . 匹配包括换行在内的所有字符

re.U

根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

re.X

该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

 

3. 正则表达式函数 

1. re.compile(pattern[, flags])

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

2. re.match(pattern, string, flags=0) 

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

3. re.search(pattern, string, flags=0) 

re.search 扫描整个字符串并返回第一个成功的匹配。注意:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

4. re.sub(pattern, repl, string, count=0, flags=0)

    pattern : 正则中的模式字符串。

    repl : 替换的字符串,也可为一个函数。

    string : 要被查找替换的原始字符串。

    count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

5. findall(string[, pos[, endpos]])

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。注意: match 和 search 是匹配一次 ,而findall 匹配所有。

6. re.split(pattern, string[, maxsplit=0, flags=0])

split 方法按照能够匹配的子串将字符串分割后返回列表。

 

 

 

参考资料:

1. https://www.runoob.com/python/python-reg-expressions.html

2. https://www.jb51.net/article/50511.htm