我希望regex
机器查找某个模式,然后只替换该模式的子集。字符串看起来像这样:
string1 = 'r|gw|gwe|bbbss|gwe | s'
而且,我想用regex
替换一些字符串,如下所示:
re.sub('\|(gw.*)\|','nn',string1)
所以,我想寻找 |
之间的东西,但我只想替换它们之间的内容,而不是整个{ {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'