一.限定符
字符 | 描述 |
---|---|
* | 匹配前面的子表达式零次或多次。* 等价于{0,}。 |
+ | 匹配前面的子表达式一次或多次。+ 等价于 {1,}。 |
? | 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 例如,do(es)? 可以匹配 do 、 does 中的 does 、 doxy 中的 do 。 |
^ | 1.匹配输入字符串的开始位置 2.在[ ]中使用时,表示不匹配[ ]中的字符集合。 |
$ | 匹配输入字符串的结尾位置。 |
{n} | n 是一个非负整数。匹配确定的 n 次。 例如,o{2} 不能匹配 Bob 中的 o ,但是能匹配 food 中的oo 。 |
{n,} | n 是一个非负整数。至少匹配n 次。 例如,o{2,} 不能匹配 Bob 中的 o ,但能匹配 foooood 中的所有 oooooo 。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 例如,o{1,3} 将匹配 fooooood 中的前三个 ooo 。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。 |
( ) | 标记一个子表达式的开始和结束位置。即分组匹配。 |
[ ] | 符合 [ ]中的任一字符就匹配。例如,a[bcd]f 可以匹配acf , 但不能匹配agf |
| | 指明两项之间的一个选择。例如,s|\d+ 可以匹配出a ,b ,52 ,6 |
二.预定义字符
字符 | 描述 | 规则 | 结果 |
---|---|---|---|
\d | \d匹配任何十进制数,它相当于类[0-9] \d+如果需要匹配一位或者多位数的数字时用 | a\dc | a1c |
\D | \D匹配任何非数字字符,它相当于类[ ^0-9 ] | a\Dc | abc |
\s | \s匹配任何空白字符,它相当于类[\t\n\r\f\v] | a\sc | a c |
\S | \S匹配任何非空白字符,它相当于类[ ^\t\n\r\f\v ] | a\Sc | abc |
\w | \w匹配包括下划线在内任何字母数字字符,它相当于类[a-zA-Z0-9_] | a\wc | abc |
\W | \W匹配非任何字母数字字符包括下划线在内,它相当于类[ ^a-zA-Z0-9_ ] | a\Wc | a c |
三.python中re模块常用函数
re.findall() 匹配所有符合规则的字符串
语法:
findall(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
re.match() 从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None
语法:
match(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
re.search() 浏览全部字符串,直到匹配出第一个符合规则的字符串
语法:
search(pattern, string, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# falgs : 匹配模式
注意:search()和match()的区别
match() 从第一个字符开始匹配, 如果第一个字符不匹配就返回None, 不再继续匹配。
search() 在整个字符串查找,直到找到一个匹配的字符。
re.split() 根据正则匹配分割字符串,返回分割后的一个列表
语法:
split(pattern, string, maxsplit=0, flags=0)
# pattern: 正则模型
# string : 要匹配的字符串
# maxsplit:指定分割个数
# flags : 匹配模式
re.sub() 替换匹配成功的指定位置字符串
语法:
sub(pattern, repl, string, count=0, flags=0)
# pattern: 正则模型
# repl : 要替换的字符串
# string : 要匹配的字符串
# count : 指定匹配个数
# flags : 匹配模式