下面的正则表达式解决方案在大多数情况下都可以使用,但是如果不平衡的单引号出现在字符串文字之外(例如在注释中),则可能会中断。
在上下文中匹配字符串的常规正则表达式技巧是匹配您需要替换的内容,以及匹配并 捕获 您需要保留的内容。
这是一个示例Python演示:
import rerx = r"('[^'\]*(?:\.[^'\]*)*')|b{0}b"s = r""" var foe = 10; foe = ""; dark_vador = 'bad guy' foe = ' I'm your father, foe ! ' bar = thingy + foe"""toReplace = "foe"res = re.sub(rx.format(toReplace), lambda m: m.group(1) if m.group(1) else 'NEWORD', s)print(res)参见Python演示
正则表达式看起来像
('[^'\]*(?:\.[^'\]*)*')|bfoeb请参阅regex演示。
该
('[^'\]*(?:\.[^'\]*)*')部分将用单引号引起来的字符串文字捕获到组1中,如果匹配,则将其放回结果中,并在任何其他字符串上下文中bfoeb匹配整个单词
foe-随后被另一个单词替换。
注意
:要也匹配双引号字符串文字,请使用
r"('[^'\]*(?:\.[^'\]*)*'|"[^"\]*(?:\.[^"\]*)*")"。


