正则表达式
动态模糊匹配
aa= "<b>注销</b>"
t=re.findall(r"<b>(.+?)</b>",aa)
print(t)
打印
['注销']
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
aa= "ChenRonghua123" t=re.match("^Chen",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 4), match='Chen'>
Chen
aa= "Chen321Ronghua123"
t=re.match("Chen",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 4), match='Chen'>
Chen
/d代表一个数字,如果代表多个数字加上+号
aa= "Chen321Ronghua123" t=re.match("^Chen\d",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 5), match='Chen3'>
Chen3
aa= "Chen321Ronghua123"
t=re.match("^Chen\d+",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 7), match='Chen321'>
Chen321
.的用法,匹配任意
aa= "Chen321Ronghua123" t=re.match(".",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 1), match='C'>
C
aa= "Chen321Ronghua123"
t=re.match("^.",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 1), match='C'>
C
aa= "Chen321Ronghua123"
t=re.match("^.+",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 17), match='Chen321Ronghua123'>
Chen321Ronghua123
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
aa= "Chen321Ronghua123" t=re.search("R.+a",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(7, 14), match='Ronghua'>
Ronghua
$匹配字符串的末尾
aa= "Chen321Ronghua123a" t=re.search("a$",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(17, 18), match='a'>
a
[a-z]匹配任意小写字母
aa= "Chen321Ronghua123a"
t=re.search("R[a-z]",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(7, 9), match='Ro'>
Ro
aa= "Chen321Ronghua123a"
t=re.search("R[a-z]+",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(7, 14), match='Ronghua'>
Ronghua
aa= "Chen321Ronghua123a"
t=re.search("R[a-z]+a",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(7, 14), match='Ronghua'>
Ronghua
[A-Z]
aa= "Chen321RongAhuaRonghua123a"
t=re.search("R[a-z]+a",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(15, 22), match='Ronghua'>
Ronghua
aa= "Chen321RongAhuaRonghua123a"
t=re.search("R[a-zA-Z]+a",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(7, 22), match='RongAhuaRonghua'>
RongAhuaRonghua
aa= "1123#hello#" t=re.search("#.+#",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(4, 11), match='#hello#'>
#hello#
?匹配前一个字符1次或者0次
aa= "alex" t=re.search("a?",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 1), match='a'>
a
aa= "aalex"
t=re.search("a?",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 1), match='a'>
a
aa= "aaaaaalex"
t=re.search("aaa?",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 3), match='aaa'>
aaa
aa= "aalexaaa"
t=re.search("aaa?",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 2), match='aa'>
aa
aa= "alexaaa"
t=re.search("aaa?",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(4, 7), match='aaa'>
aaa
aa= "aaexaaa"
t=re.search("aal?",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(0, 2), match='aa'>
aa
{}大括号,匹配n个前面表达式
aa= "aalx2a345a" t=re.search("[0-9]{3}",aa) #匹配3位数,re{ n} print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(6, 9), match='345'>
345
findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
aa= "aa1x2a345a" t=re.findall("[0-9]{1,3}",aa) #匹配1-3位数,re{ n, m} print(t)
打印
['1', '2', '345']
aa= "aa1x2a3456a"
t=re.findall("[0-9]{1,3}",aa) #匹配最大为3位数,所以3456进行了拆分
print(t)
打印
['1', '2', '345', '6']
“|”管道符,还有或的意思
aa= "ABCBabcCD" t=re.search("abc|ABC",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 3), match='ABC'>
ABC
aa= "ABCBabcCD"
t=re.findall("abc|ABC",aa)
print(t)
打印
['ABC', 'abc']
()分组匹配
aa= "alexabcc" t=re.search("abc{2}",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(4, 8), match='abcc'>
abcc
aa= "alexabcabcc"
t=re.search("(abc){2}",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(4, 10), match='abcabc'>
abcabc
匹配管道符“|”
aa= "alexabcabc|" t=re.search("(abc){2}\|",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(4, 11), match='abcabc|'>
abcabc|
aa= "alexabcabc||=||="
t=re.search("(abc){2}\|\|=",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(4, 13), match='abcabc||='>
abcabc||=
aa= "alexabcabc||=||="
t=re.search("(abc){2}(\|\|=){2}",aa)
print(t)
print(t.group())
打印
<_sre.SRE_Match object; span=(4, 16), match='abcabc||=||='>
abcabc||=||=
\A以什么开头,同^,\Z以什么结尾,同&
aa= "213a" t=re.search("\A[0-9]+[a-z]\Z",aa) #以数字开头,以小写字母结尾 print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 4), match='213a'>
213a
\D匹配非数字的任意字符,包括特殊字符
aa= "213$ -a" t=re.search("\D+",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(3, 7), match='$ -a'>
$ -a
\w匹配[A-Z][a-z][0-9],匹配字符和数字
aa= "213aaa$ -a" t=re.search("\w+",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 6), match='213aaa'>
213aaa
\w匹配非[A-Z][a-z][0-9],只匹配特殊字符
aa= "213aaa$ - *(" t=re.search("\W+",aa) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(6, 12), match='$ - *('>
$ - *(
\s匹配空白等\r\t\n等字符
aa= "213aaa$\r\n " t=re.search("\s+",aa) print(t)
打印
<_sre.SRE_Match object; span=(7, 13), match='\r\n '>
赋值字典?P
aa= "213aaa" t=re.search("(?P<id>[0-9]+)",aa) print(t) print(t.groupdict())
打印
<_sre.SRE_Match object; span=(0, 3), match='213'>
{'id': '213'}
aa= "aaa565fss888" t=re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)",aa) print(t) print(t.groupdict())
打印
<_sre.SRE_Match object; span=(3, 9), match='565fss'>
{'id': '565', 'name': 'fss'}
身份证号解析
aa= "220802198812011538" t=re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})",aa) print(t) print(t.groupdict())
打印
<_sre.SRE_Match object; span=(0, 10), match='2208021988'>
{'city': '02', 'birthday': '1988', 'province': '2208'}
re.split
split 方法按照能够匹配的子串将字符串分割后返回列表
aa= "dd33ff55hh4466hhe" t=re.split("[0-9]+",aa) print(t)
打印
['dd', 'ff', 'hh', 'hhe']
检索和替换
Python 的re模块提供了re.sub用于替换字符串中的匹配项
aa= "dd33ff55hh4466hhe" t=re.sub("[0-9]+","|",aa) print(t)
打印
dd|ff|hh|hhe
re.I忽略大小写
aa= "dddSS" t=re.search("[a-z]+",aa,flags=re.I) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(0, 5), match='dddSS'>
dddSS
aa= "dddSS\nfffk\nhhhhf" t=re.search("[a-z]+f$",aa,flags=re.I) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(11, 16), match='hhhhf'>
hhhhf
re.M 多行模式
aa= "AAa\nfffk\nhhhhf" t=re.search("^f",aa,flags=re.M) print(t) print(t.group())
打印
<_sre.SRE_Match object; span=(4, 5), match='f'>
f
aa = "Calc Result:6,Calc Resultis:4" b = re.findall("Calc Result:(.*),Calc Resultis:(.*)",aa) print(b) [('6', '4')]