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

时间:2015-11-21 03:44:38

标签: python regex regular-language

我希望regex机器查找某个模式,然后只替换该模式的子集。字符串看起来像这样:

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

而且,我想用regex替换一些字符串,如下所示:

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

所以,我想寻找 |之间的东西,但我只想替换它们之间的内容,而不是整个{ {1}}。

有简洁的方法吗?

1 个答案:

答案 0 :(得分:2)

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

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

>>> 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'