如何使用不同的捕获和匹配字符串使用正则表达式替换?

How to use regex substitute using different capture and match strings?

我想让 regex 机器寻找特定的模式,然后只替换该模式的一个子集。字符串如下所示:

string1 = 'r|gw|gwe|bbbss|gwe | s'

而且,我想用这样的 regex 替换一些字符串:

re.sub('\|(gw.*)\|','nn',string1)

所以,我想寻找 | 之间的东西,但我只想替换它们之间的东西,而不是整个 [=15] =].

有什么简洁的方法吗?

如果要保留管道字符并匹配重叠的上下文,则需要使用环视断言。因为 * 是一个贪心运算符,它会尽可能地消耗。

在这种情况下,您可以使用否定字符 class 或 *? 来防止贪婪。

>>> re.sub(r'(?<=\|)gw[^|]*(?=\|)', 'nn', s)
'r|nn|nn|bbbss|nn| s'

或者您可以采用更通用的方法:

>>> '|'.join(['nn' if i.startswith('gw') else i for i in s.split('|')])
'r|nn|nn|bbbss|nn| s'