python定义模块结束语_Python基础-re模块

print(re.findall(‘a.b‘, ‘ab aab a*b a2b a牛b a\nb‘))

打印结果:

[‘aab‘, ‘a*b‘, ‘a2b‘, ‘a牛b‘]

当re.DOTALL被指定时,可以匹配换行符

print(re.findall(‘a.b‘,‘ab aab a*b a2b a牛b a\nb‘,re.DOTALL))

打印结果:

[‘aab‘, ‘a*b‘, ‘a2b‘, ‘a牛b‘, ‘a\nb‘]

[...]匹配字符组中的字符

print(re.findall(‘a[abc]b‘, ‘aab abb acb adb afb a_b‘))

打印结果:

[‘aab‘, ‘abb‘, ‘acb‘]

[0-9]代表数字0到9的数字,[a-z]代表小写字母,[A-Z]代表大写字母

print(re.findall(‘a[0-9]b‘, ‘a1b a3b aeb a*b arb a_b‘))

打印结果:

[‘a1b‘, ‘a3b‘]

- 在[]中表示范围,如果想要匹配上- 那么这个-符号不能放在中间

print(re.findall(‘a[-*+]b‘, ‘a-b a*b a+b a/b a6b‘))

打印结果:

[‘a-b‘, ‘a*b‘, ‘a+b‘]

[^...]匹配除了字符组中的字符的所有字符

print(re.findall(‘a[^a-z]b‘, ‘acb adb a3b a*b‘))

打印结果:

[‘a3b‘, ‘a*b‘]

*匹配0个或多个左边的字符

print(re.findall(‘a*b‘, ‘ab aab aaab abbb‘))

打印结果:

[‘ab‘, ‘aab‘, ‘aaab‘, ‘ab‘, ‘b‘, ‘b‘]

print(re.findall(‘ab*‘, ‘ab aab aaab abbbbb‘))

打印结果:

[‘ab‘, ‘a‘, ‘ab‘, ‘a‘, ‘a‘, ‘ab‘, ‘abbbbb‘]

+匹配一个或多个左边的字符

print(re.findall(‘a+b‘, ‘ab aab aaab abbb‘))

打印结果:

[‘ab‘, ‘aab‘, ‘aaab‘, ‘ab‘]

?匹配0个或者1个左边的字符,非贪婪方式

print(re.findall(‘a?b‘, ‘ab aab abb aaaab a牛b aba**b‘))

打印结果:

[‘ab‘, ‘ab‘, ‘ab‘, ‘b‘, ‘ab‘, ‘b‘, ‘ab‘, ‘b‘]

{n}精准匹配n个前面的表达式

print(re.findall(‘a{2}b‘, ‘ab aab aaab aaaaabb‘))

打印结果:

[‘aab‘, ‘aab‘, ‘aab‘]

{n,m}匹配n到m次由前面的正则表达式定义的片段,贪婪方式

print(re.findall(‘a{2,4}b‘, ‘ab aab aaab aaaaabb‘))

打印结果:

[‘aab‘, ‘aaab‘, ‘aaaab‘]

a|b匹配a或者b

print(re.findall(‘a|b‘,‘alex_sb ale123_sb wusir12_sb wusir_sb ritian_sb‘))

打印结果:

[‘a‘, ‘b‘, ‘a‘, ‘b‘, ‘b‘, ‘b‘, ‘a‘, ‘b‘]

print(re.findall(‘alex|太白|wusir‘, ‘alex太白wusiraleeeex太太白odlb‘))

打印结果:

[‘alex‘, ‘太白‘, ‘wusir‘, ‘太白‘]

()匹配括号内的表达式,也表示一个组,分组

print(re.findall(‘([a-z]+)_sb‘,‘alex_sb ale123_sb wusir12_sb wusir_sb ritian_sb‘))

打印结果:

[‘alex‘, ‘wusir‘, ‘ritian‘]

()制定一个规则,将满足规则的结果匹配出来,只显示括号里面的

print(re.findall(‘(.*?)_sb‘, ‘alex_sb wusir_sb 日天_sb‘))

打印结果

[‘alex‘, ‘wusir‘, ‘日天‘]

print(re.findall(‘compan(y|ies)‘,‘Too many companies have gone bankrupt, and the next one is my company‘))

打印结果:

[‘ies‘, ‘y‘]

分组() 中加入?: 表示将整体匹配出来而不只是()里面的内容print(re.findall(‘compan(?:y|ies)‘,‘Too many companies have gone bankrupt, and the next one is my company‘))

打印结果:

[‘companies‘, ‘company‘]

混合使用

.* 贪婪匹配 从头到尾(.代表任意字符,*匹配0个或多个左边的字符,那就是有0个或多个. 那只要是a开头,b结尾的字符串都符合要求)

print(re.findall(‘a.*b‘, ‘ab aab a*()b‘))

打印结果:

[‘ab aab a*()b‘]

.*? 此时的?不是对左边的字符进行0次或者1次的匹配,而只是针对.*这种贪婪匹配的模式进行一种限定:告知他要遵从非贪婪匹配 推荐使用!

print(re.findall(‘a.*?b‘, ‘ab a1b a*()b, aaaaaab‘))

打印结果:

[‘ab‘, ‘a1b‘, ‘a*()b‘, ‘aaaaaab‘]

常用方法

re.search 查找

只要找到第一个就返回,返回的是一个包含匹配信息的对象,该对象可以用group()方法显示出来

importre

s= re.search(‘alex‘,‘alex sb sb alex 日天‘) ##这是个对象

print(s.group())

打印结果:

alex

re.match 查找

查找的内容必须在开头,否则就返回None

s = re.match(‘alex‘,‘alex sb alex sb sb alex 日天‘)print(s.group())

打印结果:

alex

re.split 分割

可以按照任意字符分割

print(re.split(‘[ ::,;;,]‘,‘alex wusir,日天,太白;女神;肖锋:吴超‘))

打印结果:

[‘alex‘, ‘wusir‘, ‘日天‘, ‘太白‘, ‘女神‘, ‘肖锋‘, ‘吴超‘]

re.sub替换

s = re.sub(‘小红‘,‘小黄‘,‘小红和小兰,明天要跟小明一起去郊游,但是小红不想去‘)print(s)

打印结果:

小黄和小兰,明天要跟小明一起去郊游,但是小黄不想去

最后如果加上数字,代表替换的次数,如果次数超出字符串出现的次数,则返回所有

s = re.sub(‘小红‘,‘小黄‘,‘小红和小兰,明天要跟小明一起去郊游,但是小红不想去‘,1)print(s)

打印结果:

小黄和小兰,明天要跟小明一起去郊游,但是小红不想去

obj=re.compile(‘\d{2}‘)

obj = re.compile(‘\d{2}‘)print(obj.search(‘abc123eeee‘).group()) #12

print(obj.findall(‘abc123eeee‘)) #[‘12‘],重用了obj

打印结果:12[‘12‘]

re.finditer

返回一个存放结果的迭代器

ret = re.finditer(‘\d‘,‘123day788add‘)print(ret.__next__().group())print([i.group() for i inret])

打印结果:1[‘2‘, ‘3‘, ‘7‘, ‘8‘, ‘8‘]

命名分组

ret = re.search("\w+)>\w+(?P=tag_name)>","

hello

")

?P是可以对组进行命名

ret = re.search("\w+)>\w+(?P=tag_name1)>","

hello

")print(ret.group(‘tag_name1‘))print(ret.group())

打印结果:

h1

hello

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值