这是我的代码:
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
问题
如何实现预期输出?
我需要与"前缀"保持1-ST组。和"后缀"图案。并假设有2组更多。
我应该在repl
中使用哪个关键字来获得预期的结果?
您可以使用基于零宽度的正则宽度:
>>> s = 'zxc wololo ! ololo zxc'
>>> print re.sub(r'(?<=zxc)([^!]*!).*?(?=zxc)', r'1', s)
zxc wololo !zxc
在这里:
-
(?<=zxc)
是一个看起来be的断言 -
(?=zxc)
是一个lookahead断言 -
([^!]*!)
匹配并捕获子字符串直到!
并在组#1中遵循!