正则.Python.保留一个组,然后用字符串替换其他组



这是我的代码:

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中遵循!

相关内容

最新更新