Regex

Python中的正则表达式

. ^ $

‘.’ 匹配除换行外的所有字符
‘^’ 匹配开始字符
‘$’ 匹配字符串结束字符

* + ?

‘*’ 匹配前边的字符0次或多次
‘+’ 匹配前边的字符1次或多次
‘?’ 匹配前边的字符0次或1次

‘*’,’+’,’?’ 是贪婪的,会匹配最大符合要求的字符串。后面加一个?号即可变成只匹配最小符合要求的字符串。

{} []

{n} 匹配前面字符n次
{m,n} 匹配前面字符最小m次,最多n次
[] 范围 例如[0-9] [a-zA-Z]

|

‘|’ 或

()

(…) 分组 匹配括号里所有的模式
(?…) 扩展根据后面不同的字符 具有不同的意义

(?iLmsux) 括号内使用的正则模式 re.I re.L re.m re.s re.u re.x
(?:…) (….)的非捕获正则匹配
(?P…) 将匹配的结果放到变量name中
(?P=name) 引用名为name的group变量
(?#…) 注释
(?=…) if条件
(?<=…)
(?<!….)
(?(id/name)yes-pattern|no-pattern)

转义 \

\number 匹配前面分组
例:

1
2
3
4
a ="12341234"
reg = r"(\d)(\d)(\d)(\d)\1\2\3\4"
res = re.match(reg,a)
print res.group(0)

\A 匹配字符串开始 同’^’ 但是多行模式下 ‘^’将匹配每一行 \A只匹配字符串开始 \Z 同理。
\b 边界匹配
边界的定义,\w所匹配以外的字符、空字符和非下划线。
例如:
r’\bfoo\b’ 匹配 ‘foo’, ‘foo.’, ‘(foo)’, ‘bar foo baz’
但是不匹配 ‘foobar’ or ‘foo3’
注意,在测试的时候如果使用 re库 请使用 re.search方法而不是match.否则像’(foo)’并不会被match匹配到,因为match方法只从起点开始匹配。
参见search和match的区别,match速度会快于search
\B 非边界匹配
与\b相反。
例如 r’py\B’ 匹配 ‘python’, ‘py3’, ‘py2’ 而不匹配 ‘py’, ‘py.’, or ‘py!’
\d 匹配数字
\D 匹配非数字
\s 空白字符 相当于[ \t\n\r\f\v]
\S 非空白字符 相当于 [^ \t\n\r\f\v]
\w 单词字符 范围[a-zA-Z0-9_]
\W 非单词字符
\Z 字符串结尾