以下是代码:
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
?
我需要使用模式的“前缀”和“后缀”保留第一组。假设有两个以上的组。
我应该在repl
中使用哪个关键字才能获得预期的结果?
答案 0 :(得分:2)
您可以使用基于零宽环视的正则表达式:
>>> s = 'zxc wololo ! ololo zxc'
>>> print re.sub(r'(?<=zxc)([^!]*!).*?(?=zxc)', r'\1', s)
zxc wololo !zxc
这里:
(?<=zxc)
是一个落后的断言(?=zxc)
是前瞻性断言([^!]*!)
匹配并捕获子字符串,直到!
并跟随#1组中的!