这是代码:

In [1]: import re

In [2]: p = 'zxc(.*?)!(.*?)zxc'

In [3]: s = 'zxc wololo ! ololo zxc'

In [4]: re.sub(pattern=p, repl=r"", string=s)
Out[4]: ''

In [5]: re.sub(pattern=p, repl=r"\1", string=s)
Out[5]: ' wololo '


预期:
zxc wololo !zxc

题:
如何获得此字符串zxc wololo !zxc
我需要使用模式的“前缀”和“后缀”保留第一组。并假设有2个以上的组。
我应该在repl中使用哪个关键字来获得预期的结果?

最佳答案

您可以使用基于零宽环视的正则表达式:

>>> s = 'zxc wololo ! ololo zxc'
>>> print re.sub(r'(?<=zxc)([^!]*!).*?(?=zxc)', r'\1', s)
zxc wololo !zxc


这里:


(?<=zxc)是一个后置断言
(?=zxc)是先行断言
([^!]*!)匹配并捕获子字符串,直到第1组中的!并跟随!

10-05 19:42