复习下以前学习的正则表达式
匹配文本字面值
ABC
匹配ABC
r = re.match('ABC', 'ABC') print(r) # <_sre.SRE_Match object; span=(0, 3), match='ABC'>
- 使用择以匹配符
|
r = re.match('ABC|BCD', 'BCD')
print(r) # <_sre.SRE_Match object; span=(0, 3), match='BCD'>
.
匹配任意字符(除了\n
, flags 可以设置 DOTALL 来取消这个限制)^
(或者\A
, 有些国家的键盘不支持脱字符 ^) 以任意字符串开头的.^cai
匹配任意以 cai 开头的字符串,$
(或者\Z
) 以任意字符串结尾的,cai$
匹配任意以 cai 结尾的字符串\b
和\B
则是用来匹配字符边界,\bcai
以 cai 开头的字符串,\bcai\B
独立的 cai 字符串,\Bcai
不以 cai 开头的字符串- 字符集
[]
,[aeiou]
表示匹配 a e i o u 任一字符,c[abc]i
匹配 cai cbi cci - 范围限定[a-z], 匹配 a 到 z 的小写字母, 同理还有 [A-Z]、[0-9], 如果出现脱字符
^
则表示与非括号内的字符匹配, [^a-z] 不匹配 a 到 z 的小写字母, [“-a] 表示 ASCII 码中的 34-97, 具体参考 ASCII 表
贪婪符号
*
匹配之前的表达式 0 次或者多次+
匹配之前的表达式 1 次或者多次?
匹配之前的表达式 0 次或者 1 次{}
次数匹配,{5}
匹配前面的表达式 5 次,{1, 5}
匹配前面的表达式 1 到 5 次均可, [0-9]{15, 16} 匹配 15 或者 16 位数字(例如信用卡号码)- 可以在贪婪符号后面加上
?
表示非贪婪模式 python3 中目前不支持侵占模式(Possessive)
特殊字符
\d
与[0-9]
一致, 与\D
相反\w
与[A-Za-z0-9_]
一致, 与\W
相反\s
与匹配任何空格字符, 与[\n\t\r\v\f]
(\n
换行符,\t
水平制表符,\v
垂直制表符,\r
回车符,\f
换页符)\b
边界符, 匹配任何单词边界\c
匹配特殊字符, 如\ . ,
扩展表示法
(iLmsux)
分组中可以设置模式,iLmsux之中的每个字符代表一个模式,具体和上一章的模式相关(?:...)
分组的不捕获模式,计算索引时会跳过这个分组(?P<name>...)
分组的命名模式,取此分组中的内容时可以使用索引也可以使用name(?P=name)
分组的引用模式,可在同一个正则表达式用引用前面命名过的正则(?#...)
注释(?<=Expression)
逆序肯定环视,表示所在位置左侧能够匹配Expression(?<!Expression)
逆序否定环视,表示所在位置左侧不能匹配Expression(?=Expression)
顺序肯定环视,表示所在位置右侧能够匹配Expression(?!Expression)
顺序否定环视,表示所在位置右侧不能匹配Expression(?(id/name)Y/N)
如果 id 或者 name 存在就匹配 Y, 如果不存在就匹配 N