正则表达式
re
模块提供了与Perl语言类似的正则表达式匹配操作
模式和被搜索的字符串既可以是Unicode字符串(str
), 也可以是8位字节串(bytes
)。但是Unicode字符串与8位字节串不能混用。
正则表达式使用反斜杠字符('')来表示特殊形式或是允许在使用特殊字符时不引发它们的特殊含义。这会与Python的字符串字面值中对相同字符处于相同目的的用法产生冲突。
例如,要匹配一个反斜杠字面值,用户可能必须写成\\\\
来作为模式字符串,因为正则表达式必须为\\
,而每个反斜杠在普通Python字符串字面值中又必须表示为\\
。
解决办法是对于正则表达式样式使用Python的原始字符串表示法。在带有'r'前缀的字符串字面值中,反斜杠不必做任何特殊处理。
正则表达式语法
一个正则表达式(或RE)指定了一集与之匹配的字符串,模块内的函数可以让你检查某个字符串是否跟给定的正则表达式匹配(或者一个正则表达式是否匹配到一个字符串,这两种说法含义相同)。
有些字符,比如"|"或者"("属于特殊字符。特殊字符既可以表示它的普通含义,也可以影响它旁边的正则表达式的解释。
重复修饰符(*,+,?,{m, n}, 等)不能直接嵌套。这样避免了非贪婪后缀?修饰符,和其他实现中的修饰符产生的多义性,要应用一个内层重复嵌套,可以使用括号。 比如,表达式(?:a{6})
匹配6个'a'字符重复任意次数。
特殊符号是:
-
. (点)在默认模式,匹配除了换行的任意字符。如果指定了标签
DOTALL
,他将匹配包括换行符的任意字符。 -
^ (插入符号)匹配字符串的开头,并且在
MULTILINE
模式也匹配换行后的首个符号 -
$ 匹配字符串串尾或者换行符的前一个字符,在
MULTILINE
模式匹配换行符的前一个字符。 -
* 对它前面的正则式匹配0到任意次重复,尽量多的匹配字符串。ab*会匹配'a', 或者'a'后面跟随任意个'b'
- 对它前面的正则式匹配 1 到任意次重复。ab+ 会匹配 'a' 后面跟随 1 个以上到任意个 'b',它不会匹配 'a'。
-
? 对它前面的正则式匹配 0 到 1 次重复。ab? 会匹配 'a' 或者 'ab'。
-
?, +?, ?? '', '+',和 '?' 修饰符都是 贪婪的;它们在字符串进行尽可能多的匹配。使用正则式 <.*?> 将会仅仅匹配 '<a>'。
-
"{m}" 对其之前的正则式指定匹配 m 个重复;少于 m 的话就会导致匹配失败。比如,a{6} 将匹配 6 个'a' , 但是不能是 5 个。
-
"{m, n}" 对正则式进行 m 到 n 次匹配,在 m 和 n 之间取尽量多。比如,a{3,5} 将匹配 3 到 5 个 'a'。
-
{m,n}? 前一个修饰符的非贪婪模式,只匹配尽量少的字符次数。比如,对于 'aaaaaa',a{3,5} 匹配 5 个 'a' ,而 a{3,5}? 只匹配 3 个 'a'。
-
\ 转义特殊字符(允许你匹配 '*', '?', 或者此类其他),或者表示一个特殊序列;特殊序列之后进行讨论。
网友评论