Python中包含正则表达式的模块。
使用前先导入正则表达式模块:
import re
语法:
re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换
- '.' 默认匹配除\n之外的任意一个字符
>>> re.search(".","hello world!")
<_sre.SRE_Match object; span=(0, 1), match='h'>
- '^' 匹配字符开头
注意:“字符开头”指要匹配的字符串的开头。
>>> re.search("^h","hello world!")
<_sre.SRE_Match object; span=(0, 1), match='h'> # <---输出结果
>>> re.search("^a","hello world!") ##<---无结果输出(不匹配)
- '$' 匹配字符结尾,同上‘^’
>>> re.search("!$","hello world!")
<_sre.SRE_Match object; span=(11, 12), match='!'>
- '*' 匹配*号前的字符0次或多次
" * " 号前若有多个字符,语法只对前一个字符有效
>>> re.search("ll*","hello world!")
<_sre.SRE_Match object; span=(2, 4), match='ll'>
>>> re.findall("ab*","cabb3abcbbac")
['abb', 'ab', 'a']
- '+' 匹配前一个字符1次或多次
>>> re.findall("ab+","ab+cd+abb+bba")
['ab', 'abb']
- '?' 匹配前一个字符1次或0次
>>> re.findall("ab?","ab+cd+abb+bba")
['ab', 'ab', 'a']
- '{m}' 匹配前一个字符m次
>>> re.search("hel{2}","hello world!")
<_sre.SRE_Match object; span=(0, 4), match='hell'>
- '{n,m}' 匹配前一个字符n到m次
>>> re.findall("ab{1,3}","abb abc abbcbbb")
['abb', 'ab', 'abb']
- '|' 匹配|左或|右的字符
>>> re.search("abc|ABC","ABCBabcCD").group()
'ABC'
- '(...)' 分组匹配
>>> re.search("(abc){2}a(123|456)c", "abcabca456c").group()
'abcabca456c'
- '\A' 只从字符开头匹配--同‘^’
- '\Z' 匹配字符结尾--同$
- '\d' 匹配数字0-9
>>> re.search('\d','today20180823')
<_sre.SRE_Match object; span=(5, 6), match='2'>
- '\D' 匹配非数字
>>> re.search('\D','today20180823')
<_sre.SRE_Match object; span=(0, 1), match='t'>
'\w' 匹配[A-Za-z0-9]
'\W' 匹配非[A-Za-z0-9]
's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
'(?P<name>...)' 分组匹配
>>> re.search("(?P<date>[0-9]{4})(?P<school>[0-9]{4})(?P<id>[0-9]{4})","201603041073").groupdict()
{'date': '2016', 'id': '1073', 'school': '0304'}