regex 正则表达式:替换除已知固定字符串以外的任何字符串?(用引号分隔)

piok6c0g  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(113)

我正在尝试匹配和替换字符串的形式
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"中失败

g52tjvyc

g52tjvyc1#

您可以将"包括在lookahead中,并在替换中使用mystring = "XYZ \1,包括匹配最后一个"

^mystring = "(?!red")(.*")$

Regex demo
或使用2个捕获组

^(mystring = ")(?!red")(.*")$

并替换为\1XYZ \2

请注意,如果使用的是C#,捕获组表示法为$1,而不是\1

请参阅带有更换件的C# demo

qjp7pelc

qjp7pelc2#

这有点笨拙,但是您可以在lookahead中包含结束引号,然后在实际的匹配模式中包含结束引号:

^mystring = "(?!red")(.*)"$

其中替换为:

mystring = "XYZ $1"

Try it .

相关问题