正则表达式:匹配并捕获任何不是给定/已知/固定字符串的字符串,用引号分隔?

问题描述 投票:0回答:2

我正在尝试匹配和替换以下形式的字符串

mystring = "string-text"

mystring = "XYZ 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"

regex regex-lookarounds regexp-replace
2个回答
1
投票

您可以在前瞻中包含

"
,并在替换中使用
mystring = "XYZ \1

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

正则表达式演示

或者使用 2 个捕获组

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

并替换为

\1XYZ \2


1
投票

这有点 hacky,但您可以在前瞻中包含结束引号,然后在实际匹配模式中:

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

替换是:

mystring = "XYZ $1"

试试.

© www.soinside.com 2019 - 2024. All rights reserved.