正则 | 特殊构造语法-分组输出-Python


  • 拖拽代码滑条可以查看输出结果

value1|value2

作用: 类似于"或",优先查找value1

obj = re.findall("abc|dde","abcdde")#['abc', 'dde']
obj = re.findall("abc|dde","adde")#['dde']

(value)

作用:用于分组,分组编号从"1"开始
说明:在不同的方法中的返回值不同

#findall中,如果正则表达式用了分组,那么python只会保存组内的值,未分组的值就会被丢弃
obj = re.findall("(cd)123","cd123")#['cd'] 
#match中,如果正则表达式用了分组,那么python会保存所有与字符串开头所匹配的值,并且将组内的值再次保存在下一个位置
obj = re.match("(cd)123","cd123").group()#group(0) cd123,group(1) cd 
#逻辑与match类似
obj = re.finditer("(cd)123","cd123")
#如果|没被包含在()中,则它的匹配范围是整个字符串。()相当于是限制了范围,同时发挥了分组和限制范围的作用
obj = re.match("(cd|ab)123","cd123").group()#group(0) cd123,group(1) cd

(?P<name>value)

作用:分组,对找到的值进行分组并赋予组名

'''
:param P:分组的名称
:param value:需要匹配的内容
'''
obj = re.findall("cd(?P<name>123)","cd123")#['123']

\number

作用:调用分组序号为number的表达式

'''
:param number:分组的编号
'''
obj = re.match(r"(123)asd\1","123asd123").group(1)
#group(0) 123asd123,group(1) 123
#相当于调用group中下标为1的字符串

(?P=name)

作用:调用分组名称为name的表达式

'''
:param name:分组的名称
'''
obj = re.match("(?P<id1>123)asdf(?P=id1)","123asdf123").group()
#group(0) 123asdf123,group(1) 123

特殊构造语法

说明:这里的"()"没有分组功能,更多的是限制范围的功能

(?:value)

作用:用于使用|或接数量词

obj = re.finditer("(?:123){1}","asd123123")#123 123
obj = re.finditer("(?:123){2}","asd123123") #123123
obj = re.finditer("(?:123){2}","1233")#none#对比案例

(?mode:value)

作用:选择匹配模式

'''
param mode:匹配模式
param mode:可选iLmsux
'''
obj = re.finditer("(?i:AsdF)123","asdf123")#asdf123#不区分大小写

(?#)

作用:注释

obj = re.finditer("(?#这个是注释)123asd","bnm123asd123")#123asd

(?=value)、(?!value)、(?<=value)、(?<!value)

作用:判断,相当于if

#(?=value)
obj = re.finditer(r"2ab(?=12)123","12ab123")
#如果2ab后面的字符串是12则继续匹配,否则直接结束
#(?!value)  逻辑与(?=value)相反,如果后面不是xx则继续匹配,否则结束匹配
#(?<=value) 如果前面...
#(?<!value) 如果前面...

(?(index/name)yes-value|no-value)

说明:如果存在值为index或name的分组,就匹配yes-value,否则匹配no-value

obj = re.finditer("(<)abcd(?(1)>|)","<abcd>")#<abcd>#如果不存在则不匹配

输出

#finditer用for循环取值,其他用 print(obj)
for o in obj:
    print(o.group())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值