在使用正则表达式时,我们常常用
来表示分组,例如:
>>> re.search(r'(a(b))', 'xaby').groups()
('ab', 'b')
有时我们不需要返回这个分组,只是想用括号来表示语义逻辑,例如:
>>> re.search(r'(a(b|c))', 'xaby').groups()
('ab', 'b')
我们只想表示a的后面是b或者c,但是不想把b或者c当作一个分组返回。此时可以使用
1
| 非捕获的分组(non-capturing group)
|
, 语法为
:
>>> re.search(r'(a(?:b|c))', 'xaby').groups()
('ab',)
如果我们希望表达的意思是
,可以用
, 语法为
:
>>> re.search(r'(a(?=b|c))', 'xaby').groups()
('a',)
类似的,如果想匹配
,可以用
, 语法为
>>> re.search(r'(a(?!c|d))', 'xaby').groups()
('a',)
同样,我们也可以表示
, 分别为
和
, 语法为
和
:
>>> re.search(r'((?<=a)b)', 'xaby').groups()
('b',)
>>> re.search(r'((?<!c|d)b)', 'xaby').groups()
('b',)