这是代码:
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组中的!
并跟随!