欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

操作python中的正则表达式(下)

程序员文章站 2022-07-16 16:26:23
...

六月最后一天,我的精神支柱家驹二十五年祭,愿你依然高歌,不羁放纵爱*。
进入正则下篇,上代码吧:
import re
pat=re.compile(r'(\d+)')
print('*****compile函数用于编译正则表达式,生成一个正则表达式Pattern对象*****')
p=pat.match('ni2333hao666a')
print(p)
p1=pat.match('ni2333hao666a',1,8)
print(p1)
p2=pat.match('ni2333hao666a',2,8)
print(p2)
p3=pat.match('ni2333hao666a',2,12)
print(p3)
p4=pat.search('ni2333hao666a')
print(p4)
print(p3.group())
print(p3.groups())  #match和search都只匹配一次
print('*****match和search匹配一次,而findall匹配所有*****')
p5=pat.findall('ni2333hao666a') #以列表形式返回全部匹配结果
print(p5)
p6=pat.findall('ni2333hao666a',2,11) 
print(p6)
p7=pat.finditer('ni2333hao666a') #类似于findall,不过它返回迭代器
for pp in p7:
    print(pp.group())
print('*****split函数以各种形式切分字符串*****')
p8=pat.split('ni 2333-hao,666.a')  #按数字切分
print(p8)
p9=re.split(r'\W+','ni 2333-hao,666.a')
print(p9)
p10=re.split(r'(\W+)','ni 2333-hao,666.a') #对比上一个,加()之后将分隔符也显示了出来
print(p10)
p11=re.split(r'\W+','ni 2333-hao,666.a',2) #切两次
print(p11)

有密集恐惧症的人估计是要晕过去了,我实在不知道该怎么组织语言了,大家忍忍。。
分三部分吧,第一部分是关于上篇谈到的match和search两个方法,前者只能从开头匹配,而后者可以任意角度全方位多层次匹配~~第二部分是findall和finditer两个方法,前者可以匹配多次,这个是相对于match以及search只能匹配一次而言的,注意一下起始和结束的区间,结束位是不包含在内的,就像第二个findall,下标11为第三个6,则其是不在匹配范围内的;第三个是split方法,切分字符串的,分隔符为正则匹配的字串,本例中\W匹配的是非字母数字下划线,注意一下带()和不带()的区别……

看下效果:
操作python中的正则表达式(下)

如果将一开始的pat=re.compile(r'(\d+)')改为pat=re.compile(r'(\d+)(\d+)'),看下效果:

操作python中的正则表达式(下)
将每一个匹配项分为了两个……如果写三个或者四个那就继续划分~~

之后还有很多用到正则的地方,到时再仔细研究吧,还是具体问题具体分析,前方路漫漫,且行且珍惜。