python正则表达式分组标记

1 (?:…)

表示一个匹配不用保存的分组

>>> a = '123dd'
>>> re.match('(?:\d+)', a).groups()
()
>>> re.match('(\d+)', a).groups()
('123',)
>>>

2 (?P…)

使用标签表示匹配的内容,注意这里用的是groupdict()

>>> re.match('(?P<data>\d+)', a).groupdict()
{'data': '123'}
>>>

3(?P=name)

引用之前已经匹配的tag

>>> a = '123dd123'
>>> re.match('(?P<data>\d+)dd(?P=data)$', a).groupdict()
{'data': '123'}
>>>

以上例子中,第一个data为123, 后面的data引用了上一个匹配的data,所以也得匹配

4 (?#…)

表示注释,所有内容都被忽略

>>> re.match('(?P<data>\d+).*?(?#this is coment)', a).groupdict()
{'data': '123'}
>>>

5 (?=…)

正向前视断言。仅当子表达式 … 在 此位置的右侧匹配时才继续匹配。例如,\w+(?=\d) 与后跟数字的单词匹配,而不与该数字匹配

>>> re.match('\w+(?=\d)', 'aa123').group()
'aa12'

可以看出,匹配的是单个数字之前的内容

6 (?!..)

负向前视断言。仅当子表达式 … 不在 此位置的右侧匹配时才继续匹配。例如,例如,\w+(?!\d) 与后不跟数字的单词匹配,而不与该数字匹配

>>> re.match('\w+(?!\d)', 'aa12.3').group()
'aa12'
>>>

7 (?<=…)

正向后视断言。仅当子表达式 …在 此位置的左侧匹配时才继续匹配。例如,(?<=19)99 与跟在 19 后面的 99 的实例匹配

>>> re.search('(?<=95|98|NT)Windows', '95Windows')
<_sre.SRE_Match object; span=(2, 9), match='Windows'>

8 (?<!..)

负向后视断言。仅当子表达式 …不在此位置的左侧匹配时才继续匹配。例如,(?<!19)99 与不跟在 19 后面的 99 的实例匹配

>>> re.search('(?<!95|98|NT)Windows', 'aaWindows')
<_sre.SRE_Match object; span=(2, 9), match='Windows'>

9 (?(id/name)Y|N)

如果分组所提供的id或者name存在,就返回正则表达式的条件匹配Y,如果不存在,就返回N;|N是可选项
如:(?(1)y|x)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值