#re模块(正则表达式):用作模糊匹配
# 分为两种:①元字符:".","^","$","*","+","?","{}","[]","|","()","\"
# ②普通字符
import re
#通配符"."(除\n以外所有字符都可匹配)
print(re.findall('a.c','abcabcabcadcadcabbbc')) #['abc', 'abc', 'abc', 'adc', 'adc']
#"^"(开头匹配)
print(re.findall('^a..','abcddaccd')) #['abc']
#"$"(结尾匹配)
print(re.findall('a..d$','abcdabcdaacad')) #['acad']
#"*"(匹配[0,+oo)次)
# print(re.findall('*abcd','abcd')) #放在开头会报错
print(re.findall('abcd*','abcdddabcaabcdbabc')) #['abcddd', 'abc', 'abcd', 'abc']
#"+"(匹配(1,+oo)次)
# print(re.findall('+abcd','abcdabcaabcdbabc')) #同上
print(re.findall('abcd+','abcdddabcaabcdbabc')) #['abcddd', 'abcd']
#"?"(匹配0次或1次)
# print(re.findall('?abcd','abcdddabcaabcdbabc')) #报错
print(re.findall('abcd?','abcdddabcaabcdbabc')) #['abcd', 'abc', 'abcd', 'abc']
#"{}"
print(re.findall('abc{3}','abcabcccabcccd')) #c需要重复三次,['abccc', 'abccc']
print(re.findall('abc{1,6}','abcabccabcccabccccd')) #c重复1,2,3,4,5,6次都可以,['abc', 'abcc', 'abccc', 'abcccc']
print(re.findall('abc{0,}','abcababcccd')) #相当于"*",['abc', 'ab', 'abccc']
print(re.findall('abc{1,}','ababcabccabccd')) #相当于"+",['abc', 'abcc', 'abcc']
print(re.findall('abc{0,1}','aabcabbccabccd')) #相当于"?",['ab', 'abc', 'abc', 'abc']
#"*","+","?","{}"都是贪婪匹配,在后边加上"?"变成惰性匹配
print(re.findall('abc*?','ababcabccabccd')) #['ab', 'ab', 'ab', 'ab']
print(re.findall('abc+?','ababcabccabccd')) #['abc', 'abc', 'abc']
print(re.findall('abc??','ababcabccabccd')) #['ab', 'ab', 'ab', 'ab']
print(re.findall('abc{1,3}?','ababcabccabccd')) #['abc', 'abc', 'abc']
#字符集"[]"(表示或者),"^"在这里表示非,"-"表示范围
print(re.findall('[abc]','abc')) #['a', 'b', 'c']
print(re.findall('a[a-z]','ababcabcab')) #['ab', 'ab', 'ab', 'ab']
print(re.findall('a[a-z]*','abcadded123')) #['abcadded']
print(re.findall('a[^a-z]*','a123abc')) #['a123', 'a']
#转义符"\"(将有特殊功能的变为普通字符,将普通字符变成有功能的字符
# \d匹配任何十进制数字
# \D匹配任何非数字字符
# \s匹配任何空白字符
# \S匹配任何非空白字符
# \w匹配任何字母数字字符
# \W匹配任何非字母数字字符
# \b匹配一个特殊字符边界,比如空格、&,#等
print(re.findall('\d','abc123')) #['1', '2', '3']
print(re.findall('\\\d','abc123')) #[]
print(re.findall('\D','abc123##')) #['a', 'b', 'c', '#', '#']
print(re.findall('\D*','abc123##')) #['abc', '', '', '', '##', '']
#管道符"|",表示或
print(re.findall('xa|b','xaddxbxab')) #['xa', 'b', 'xa', 'b']
print(re.findall('x[ab]','xaddxbxab')) #['xa', 'xb', 'xa']
#分组"()"
print(re.findall('(ad)','adadabcd')) #['ad', 'ad']
print(re.findall('(jq)|(dwj)','abcjqdwjabc')) #[('jq', ''), ('', 'dwj')]
#re模块中的常用方法
#返回满足条件的所有结果,放在列表中返回
print(re.findall('abc','abcabcabc')) #['abc', 'abc', 'abc']
#匹配到第一个就返回,返回字符串,搭配group()方法
print(re.search('abc','abcabcabc')) #<re.Match object; span=(0, 3), match='abc'>
print(re.search('abc','abcabcabc').group()) #abc
#从字符串开头开始匹配,遇到第一个就返回
print(re.match('abc','abcabcabc')) #<re.Match object; span=(0, 3), match='abc'>
print(re.match('abc','abcabcabc').group()) #abc
#分割
print(re.split('a','abcadef')) #['', 'bc', 'def']
#先按照a分割,再按照d分割
print(re.split('a','abdcdasdfh')) #['', 'bdcd', 'sdfh']
print(re.split('[ad]','abdcdasdfh')) #['', 'b', 'c', '', 's', 'fh']
#三个参数,将前者替换为后者
print(re.sub('\d+','A','abc123dd45')) #abcAddA
print(re.sub('\d','A','abc123dd45')) #abcAAAddAA
#四个参数,第四个参数表示前三个替换
print(re.sub('\d','A','abc123dd45',3)) #abcAAAdd45
#返回结果替换了几次
print(re.subn('\d','A','abc123dd45')) #('abcAAAddAA', 5)
#定制匹配规则,方便使用
print(re.compile('\d+').findall('abc123def456')) #['123', '456']
#按照规则取出元素放到一个迭代器中
ret = re.finditer('\d','abc123456')
print(ret) #<callable_iterator object at 0x0000016C50025B70>
print(next(ret).group()) #1
print(next(ret).group()) #2
#()具有优先级,里边的内容优先匹配出来
print(re.findall('www\.(baidu|163)\.com','www.baidu.com')) #['baidu']
#?:--->去除优先级
print(re.findall('www\.(?:baidu|163)\.com','www.baidu.com')) #['www.baidu.com']
Python正则表达式(re模块)
最新推荐文章于 2023-05-12 21:23:59 发布