这里是正则表达式常用表示法与函数,以备查询。
符号
普通符号
表示法
描述
示例
.
匹配任意字符,\n除外
b.b,表示以b开头以b结尾的任意字符串
\d
匹配0-9的数字字符
\d{3},表示3个数字
\w
匹配任意字母数字下划线字符
\w+,至少一个字母数字下划线组合
\s
匹配任何空格,与[\n\t\r\v\f]相同
\s\s+,至少2个空格
[…]
匹配括号内字符集的任意单一字符
[aeiou],匹配aeiou这5个字符中的一个
[x-y]
匹配x~y之间任意字符
[0-9],匹配0-9这10个数字,同\d
\N
匹配已保存的子组,N是子组的序号
\2,表示已匹配的第2个子组
\c
c是一个特殊字符,匹配非转义的字符
\, \*
literal
表示字面值
输入什么,就匹配什么
\D
与\d相反,匹配非数字
\W
与\w相反,匹配非字母数字下划线
\S
与\s相反,匹配非空格
辅助符号
表示法
描述
示例
*
匹配0次或多次,默认贪婪
+
匹配1次或多次,默认贪婪
?
匹配0次或1次,默认贪婪
{N}
匹配N次
{M, N}
匹配M~N次,默认贪婪
?
在上述符号后面,加上?,转为非贪婪
|
表示或,用在两个表达式之间
^(或者\A)
匹配字符串起始部分
$(或者\Z)
匹配字符串结束部分
[^…]
不匹配字符集内的字符
\b
表示在字符串边界,即开始或结尾
\bthe,表示以the开头字符串;\bthe\b,表示the
\B
与\b相反,表示不在边界
\Bthe,表示字符串不以the开头
扩展符号
表示法
描述
?iLmsux
加入特殊标记
(?:…)
括号内的匹配不分组
(?=…)
匹配…出现在之后的位置
(?!…)
匹配…不出现在之后的位置
(?<=…)
匹配…出现在之前的位置
(?<!…)
匹配…不出现在之前的位置
(?(id/name)Y/N)
如果id或name对应的分组存在,则返回Y,否则返回N
(?P…)
由name标识而不是数字id标识的分组匹配
(?P=name)
在同一个字符串中匹配由(?P)分组的文本
函数
常用函数
函数
描述
match(pattern, string, flags=0)
从字符串起始位置,匹配1次,起始必须匹配
search
从字符串左侧开始,匹配1次,起始不必匹配
findall
查找所有匹配,返回列表
finditer
查找所有匹配,返回迭代器
split(pattern, string, max=0)
返回根据pattern分割后字符串列表,默认分割max次
sub(pattern, repl, string, count=0)
替换所有匹配pattern并返回新字符串,默认替换无数次
groups
返回包括所有匹配子组的元组,若无匹配,则为空元组
group(num=0)
返回指定序号的子组,若编号为0,则返回整个匹配
常用模块属性
模块属性
描述
re.I, re.IGNORECASE
不区分大小写
re.L, re.LOCALE
根据使用的本地语言环境通过\w \W \b \B \s \S实现匹配
re.M, re.MULTILINE
^ $ 分别匹配目标字符串每行的起始和结尾
re.S, re.DOTALL
.点号可以匹配\n
re.X, re.VERBOSE
允许忽略字符串中换行符和注释段落,增强可读性
函数调用示例
# 增加(?i)使匹配忽略大小写
>> > re . findall ( r ' (?i)yes ' , ' yes? Yes. YES! ' )
[ ' yes ' , ' Yes ' , ' YES ' ]
# 增加(?im)表示匹配忽略大小写,^$从每行开始和结束匹配。
>> > re . findall ( r ' (?im)(^th[ \ w ]+) ' , """
... This line is the first,
... another line,
... that line, it ' s the best.
... """ )
[ ' This line is the first ' , ' that line ' ]
# ?:使用表示不分组,?(1)表示判断分组1是否存在
# (?:(x)|y),表示x或者y,但x是一个子组,整体却不是。即如果匹配到x,x是一个子组;匹配到y,y不是子组。
# (?(1)y|x),表示匹配到的第一个子组如果存在,即x存在,那么下一个应该是y;若不存在,下一个则是x。
>> > pattern = r ' (?:(x)|y)(?(1)y|x) '
>> > bool ( re . search ( pattern , ' xy ' ) )
. . . True