我的字符串如下,
string str = "FX(Y + 1, -(5 * 10) + FML("Test - KB")";
我想用“-1 *”替换“ - ”。但是它不应该适用于文字字符串。例如。不应将FML(“Test-KB”)更改为FML(“Test -1 * KB”)。
所需的输出为“FX(Y + 1,-1 *(5 * 10)+ FML(”Test - KB“)”。
有没有办法在正则表达式中执行此操作?
非常感谢任何建议/帮助。
答案 0 :(得分:2)
在您的示例中,您可以将-(
替换为-1*(
,这似乎是您想要的,但它实际上取决于您的确切字符串。例如,在你的例子中,Test - KB
永远不会有 - 被替换,因为它不是字符串的一部分,而是一个被添加到字符串中的计算。
答案 1 :(得分:1)
-(?=[^"]*(?:[^"]*\"[^"]*\"[^"]*)*$)
前面的正则表达式字符串将匹配每个减号后面没有偶数或零“。所以它将匹配此字符串中的减号:
abc - dssda dsda asd
ab - dssd ds F(" sdds ")
fhdhhf - asd F("ssd") sdsd D("dsfdf")
这可确保正在替换的减号不包含在字符串文字中。这是C#中的一个例子。
string input = "FX(Y + 1, -(5 * 10) + FML(\"Test - KB\")";
string replacement = "-1 *";
Regex rgx = new Regex("-(?=[^\"]*(?:[^\"]*\"[^\"]*\"[^\"]*)*$)");
string result = rgx.Replace(input, replacement);
答案 2 :(得分:0)
您可以尝试使用此正则表达式仅匹配由“(”
放置的“ - ”[^ - ] +( - )(?:()[^ - ]
答案 3 :(得分:0)
试试这段代码:
using System.Text.RegularExpressions;
string str = "FX(Y + 1, -(5 * 10) + FML(\"Test - KB\")";
string r = new Regex("-[(]").Replace(str,"-1*(");
此代码找到 - (并替换为-1 *(
答案 4 :(得分:0)
看起来像这样:
var result = Regex.Replace("FX(Y + 1, -(5 * 10) + FML(\"Test - KB\")",
"(?<=^([^\"]|\"[^\"]*\")*)-",
"-1 * ");
正则表达式解释:
(?<= # preceded by..
^ # the start of the string, then
([^"] # either not a " character
|"[^"]*" # or a string: "..."
)* # as many times as you want
)
- # then match the hyphen
示例字符串的输出为:
FX(Y + 1, -1 * (5 * 10) + FML("Test - KB")
(请注意,如果目标语言支持字符串转义,则不会处理字符串转义。)
此解决方案将正确处理字符串,而不仅仅是启发式。这是一个例子:
FX(Y+1, -(X+Y) + "EMBEDDED: FX(Y + 1, -(5 * 10)" - (X+Y)
变为:
FX(Y+1, -1 *(X+Y) + "EMBEDDED: FX(Y + 1, -(5 * 10)" -1 * (X+Y)
请注意,即使字符串看起来像&#34;也不会触及该字符串。其他部分。