正则表达式。蟒蛇。保留一组并替换成字符串

时间:2019-02-27 10:39:51

标签: python regex

以下是代码:

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中使用哪个关键字才能获得预期的结果?

1 个答案:

答案 0 :(得分:2)

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

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

这里:

  • (?<=zxc)是一个落后的断言
  • (?=zxc)是前瞻性断言
  • ([^!]*!)匹配并捕获子字符串,直到!并跟随#1组中的!