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)

发布了127 篇原创文章 · 获赞 10 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/u012599545/article/details/104526527