如何使用不同的捕获和匹配字符串使用正则表达式替换?
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'
我想让 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'