Python正则表达式(re模块)

Python正则表达式(re模块),第1张

Python正则表达式(re模块)
#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'))     #
print(re.search('abc','abcabcabc').group())     #abc

#从字符串开头开始匹配,遇到第一个就返回
print(re.match('abc','abcabcabc'))      #
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)      #
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']

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5522149.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存