对Python中正则表达式的理解,主要就是对符号的理解,主要的符号有:
>>> re.search('(?<!\d)def', 'adef').group()
>>> re.search('(\d)def(?(1)-abc|-123)', '0def-abc').group()
匹配字符串的开头
匹配单词边界
[0-9]
[^0-9]
[ \t\r\n\f\v]
非空白字符
[a-zA-Z0-9]
\w的反义
.
默认匹配一个字符,不包含换行符,如果设置
DOTALL则匹配换行符
^
匹配行首
$
匹配行尾
*
匹配0个或者多个重复
+
匹配一个或者多个重复
?
匹配一个或者零个重复
*?,+?,??
按照非贪婪模式匹配
{m},{m,n},{m,n}?
分别匹配m个重复,m至n个重复,m至n个重复按照非贪婪模式
\
转义
[]
[abc],[a-z][^a-z]
|
或者匹配 'a|b'
(...)
匹配组
(?iLmsux)
(?:...)
(?P<name>...)
>>> re.match('(?P<name>abc){2}','abcabc').groupdict()
{'name': 'abc'}
(?P=name)
>>> re.match(r'(?P<name>abc)----(?P=name)','abc----abc').group()
'abc----abc'
'abc----abc'
(?#...)
#后面的内容为注释(?=...)
匹配的字符串后面的内容需要匹配
>>> re.match(r'phone(?=\d{3})','phone123').group()
'phone'#
匹配的字符后面内容不能匹配
>>> re.match(r'phone(?!\d{3})','phoneabc123').group()
'phone'
(?<=...)
匹配的字符串前面需要匹配
>>> re.search('(?<=\d)def', '1def').group()
'def'
(?<!...)匹配的字符前面不能匹配
>>> re.search('(?<!\d)def', 'adef').group()
'def'
(?(id/name)yes-pattern|no-pattern)
>>> re.search('(\d)def(?(1)-abc|-123)', '0def-abc').group()
'0def-abc'
\number
\A
匹配字符串的开头
\b
匹配单词边界
\B
\b的反义
\d
[0-9]
\D
[^0-9]
\s
[ \t\r\n\f\v]
\S
非空白字符
\w
[a-zA-Z0-9]
\W
\w的反义
\Z
匹配字符串的结束