我正在尝试匹配和替换字符串的形式mystring = "string-text"
与mystring = "XYZ string-text"
- 当且仅当 * string-text不等于
red
时。例如
original-text replacement
------------- -----------
mystring = "red" mystring = "red"
mystring = "green" mystring = "XYZ green"
mystring = "blue" mystring = "XYZ blue"
mystring = "reds" mystring = "XYZ reds"
mystring = "_red" mystring = "XYZ _red"
mystring = "1ed" mystring = "XYZ 1ed"
mystring = "ree" mystring = "XYZ ree"
mystring = "" mystring = "XYZ "
mystring = "12345678" mystring = "XYZ 12345678"
mystring = "red"
保持不变,所有其他的都按照描述替换。是否存在一个正则表达式来实现这一点?
我能想到的最好办法就是
^mystring = "(?!red)(.*)"$
捕获组(.*)
允许使用mystring = "XYZ \1"
打印替换。这在大多数情况下有效,但在测试用例mystring = "reds"
中失败
2条答案
按热度按时间g52tjvyc1#
您可以将
"
包括在lookahead中,并在替换中使用mystring = "XYZ \1
,包括匹配最后一个"
Regex demo
或使用2个捕获组
并替换为
\1XYZ \2
请注意,如果使用的是C#,捕获组表示法为
$1
,而不是\1
请参阅带有更换件的C# demo。
qjp7pelc2#
这有点笨拙,但是您可以在lookahead中包含结束引号,然后在实际的匹配模式中包含结束引号:
其中替换为:
Try it .