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'))     #<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']

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值