正泽学校

更新时间:2023-04-12 00:28:23 阅读: 评论:0

平方计算器-志愿服务制度

正泽学校
2023年4月12日发(作者:自动关机怎么设置)

python正则表达式group⽤法_【Python】正则表达式⽤法

导读:正则在各语⾔中的使⽤是有差异的,本⽂以Python3为基础。本⽂主要讲述的是正则的语法,对于re模块不做过多描述,只会对⼀些特殊地⽅做提⽰。

很多⼈觉得正则很难,在我看来,这些⼈⼀定是没有⽤⼼。其实正则很简单,根据⼆⼋原则,我们只需要懂20%的内容就可以解决80%

的问题了。我曾经有⼏年⼏乎每天都跟正则打交道,刚接⼿项⽬的时候我对正则也是⼀⽆所知,花半⼩时百度了⼀下,然后写了⼏个

demo,就开始正式接⼿了。三年多时间,我⽤到的正则鲜有超出我最初半⼩时百度到的知识的。

1、正则基础

1.1、基础语法

(1)常⽤元字符

语法描述b

匹配单词的开始或结束

d

匹配数字s

匹配任意不可见字符(空格、换⾏符、制表符等),等价于[fnrtv]。w

匹配任意Unicode字符集,包括字母、数字、下划线、汉字等.

匹配除换⾏符(n)以外的任意字符^或A

匹配字符串或⾏的起始位置$或Z

匹配字符串或⾏的结束位置

(2)限定词(⼜叫量词)

语法描述*

重复零次或更多次+

重复⼀次或更多次

重复零次或⼀次

{n}

重复n次{n,}

重复n次或更多次{n,m}

重复n到m次

(3)常疫情防控人员 ⽤反义词

语法描述B

匹配⾮单词的开始或结束

D

匹配⾮数字S

匹配任意可见字符,[^fnrtv]W

匹配任意⾮Unicode字符集

除a、b、c以外的任意字符

(4)字符族

语法描述

[abc]a、b或c

除a、b、c以外的任意字符

[a-zA-Z]

a到z或A到Z[a-d[m-p]]

a到d或m到p,即[a-dm-假如我是风 p](并集)

[a-z&&[def]]

d、e或f(交集)[a-z&&[^bc]]

a到z,除了b和c:[ad-z](减去)[a-z&&[^m-p]]

a到z,减去m到p:[a-lq-z](减去)

以上便是正则的基础内容,下⾯来写两个例⼦看下:s='123abc你好'

('d+',s).group()

('w+',s).group()结果:

123

123abc你好是不是很简单?

1.2、修饰符

修饰符在各语⾔中也是有差异的。

Python中的修饰符:

修饰符描述re.A

匹配ASCII字符类,影响w,W,b,B,d,D

re.I

忽略⼤⼩写re.L

做本地化识别匹配(这个极少极少使⽤)re.M

多⾏匹配,影响和re.S

使.匹配包括换⾏符(n)在内的所有字符re.U

匹配Unicode字符集。与re.A相对,这是默认设置re.X

忽略空格和#后⾯的注释以获得看起来更易懂的正则。(1)re.A

修饰符A使w只匹配ASCII字符,W匹配⾮ASCII字符。s='123abc你好'

('w+',s,re.A).group()

('W+',s,re.A).group()

结果:

123abc你好

但是描述中还有d和D,数试卷反思怎么写 字不都是ASCII字符吗?这是什么意思?别忘了,还有全⾓和半⾓!

s='0123456789'#全⾓数字

('d+',s,re.U).group()结果:

0123456789

(2)re.M

多⾏匹配的模式其实也不常⽤,很少有⼀⾏⾏规整的数据。

s='aaarnbbbrnccc'

l('^[sw]*?$',s)

l('^[sw]*?$',s,re.M)结果:

['aaarnbbbrnccc']#单⾏模式

['aaar','bbbr','ccc']#多⾏模式(3)re.S

这个简单,直接看个例⼦。

s='aaarnbbbrnccc'

l('^.*',s)

l('^.*',s,re.S)

结果:['aaar']

['aaarnbbbrnccc']

(4)re.X⽤法如下:

rc=e(r"""

d+#匹配数字

#和字母

[a-zA-Z]+""",re.X)

('123abc').group()

结果:123abc

注意,⽤了X修饰符后,正则中的所有空格会被忽略,包括正则⾥⾯的原本有⽤的空格。如果正则中有需要使⽤空格,只能⽤s代替。(5)(?aiLmsux)

修饰符不仅可以代码中指定,也可以在正则中指定。(?aiLmsux)员工自愿离职协议书 表⽰了以上所有的修饰符,具体⽤的时候需要哪个就右侧腰疼 在?后⾯加上对应的

字母,⽰例如下,(?a)和re.A效果是⼀样的:s='123abc你好'

('(?a)w+',s).group()

('w+',s,re.A).group()结果是⼀样的:

123abc

123abc1.3、贪婪与懒惰

当正则表达式中包含能接受重复的限定符时,通常的⾏为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。s='aabab'

('a.*b',s).group()#这就是贪婪

('a.*?b',s).group()#这就是懒惰

结果:

aabab

aab简单来说:

所谓贪婪,就是尽可能多的匹配;

所谓懒惰,就是尽可能少的匹配。*、+、{n,}这些表达式属于贪婪;

*?、+?、{n,}?这些表达式就是懒惰(在贪婪的基础上加上?)。

2、正则进阶

2.1、捕获分组

语法描述(exp)

匹配exp,并捕获⽂本到⾃动命名的组⾥(?Pexp)

匹配exp,并捕获⽂本到名称为name的组⾥(?:exp)

匹配exp,不捕获匹配的⽂本,也不给此分组分配组号(?P=name)

匹配之前由名为name的组匹配的⽂本

注意:在其他语⾔或者⽹上的⼀些正则⼯具中,分组命名的语法是(?exp)或(?'name'exp),但在Python⾥,这样写会报错:This

namedgroupsyntaxisnotsupportedinthisregexdialect。Python中正确的写法是:(?Pexp)⽰例⼀:

分组可以让我们⽤⼀条正则提取出多个信息,例如:

s='姓名:张三;性别:男;电话:9'

m=('姓名[::](w+).*?电话[::](d{11})',s)ifm:

name=(1)

phone=(2)

print(f'name:{name},phone:{phone}')结果:

name:张三,phone:⽰例⼆:

(?Pexp)有时还是会⽤到的,(?P=name)则很少情况下会⽤到。我想了⼀个(?P=name)的使⽤⽰例,给⼤家看下效果:

s='''

张三30

9'''

pattern=r'.*?)>(.*?)(?P=name)>'

It=l(pattern,s)结果:

[('name','张三'),('age','30'),('phon描写竹子的诗句 e','9')]

2.2、零宽断⾔

语法描述(?=exp)

匹配exp前⾯的位置(?<=exp)

匹配exp后⾯的位置(?!exp)

匹配后⾯跟的不是exp的位置(?

匹配前⾯不是exp的位置

注意:正则中常⽤的前项界定(?<=exp)和前项否定界定(?

(?<=aaa)#正确

(?<=aaa|bbb)#正确

(?<=aaa|bb)#错误

(?<=d+)#错误

(?<=d{3})#正确2.3、条件匹配

这⼤概是最复杂的正则表达式了。语法如下:语法描述

(?(id/name)yes|no)

如果指定分组存在,则匹配yes模式,否则匹配no模式此语法极少⽤到,印象中只⽤过⼀次。

以下⽰例的要求是:如果以_开头,则以字母结尾,否则以数字结尾。

s1='_abcd's2='abc1'

pattern='(_)?[a-zA-Z]+(?(1)[a-zA-Z]|d)'

(pattern,s1).group()

(pattern,s2).group()

结果:

_abcd

abc12.4、findall

Python中的l是个⽐较特别的⽅法(之所以说它特别,是跟我常⽤的C#做⽐较,在没看注释之前我想当然的掉坑⾥去了)。我们看这个⽅法的官⽅注释:

Returnalistofallnon-overlappingmatchesinthestring.

Ifoneormorecapturinggroupsareprentinthepattern,return

alistofgroups;thiswillbealistoftuplesifthepatternhasmorethanonegroup.

Emptymatchesareincludedintheresult.简单来说,就是

如果没有分组,则返回整条正则匹配结果的列表;

如果有1个分组,则返回分组匹配到的结果的列表;

如果有多个分组,则返回分组匹配到的结果的元组的列表。看下⾯的例⼦:

s='aaa123b鼻子上有痣的女人 bb456ccc'

l('[a-z]+d+',s)#不包含分组

l('[a-z]+(d+)',s)#包含⼀个分组l('([a-z]+(d+))',s)#包含多个分组

l('(?:[a-z]+(d+))',s)#?:不捕获分组匹配结果结果:

['aaa123','bbb456']['123','456']

[('aaa123','123'),('bbb456','456')]

['123','456']

零宽断⾔中讲到Python中前项界定必须是定长的,这很不⽅便,但是配合findall有分组时只取分组结果的特性,就可以模拟出⾮定长前

项界定的效果了。结语

其实正则就像是⼀个数学公式,会背公式不⼀定会做题。但其实这公式⼀点也不难,⾄少⽐学校⾥学的数学简单多简爱心得体会 了,多练习⼏次也就会了。

班主任兵法-父爱陷阱

正泽学校

本文发布于:2023-04-12 00:28:22,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/1681230503126985.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:正泽学校.doc

本文 PDF 下载地址:正泽学校.pdf

下一篇:返回列表
标签:正泽学校
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|