使用正则表达式替换“ - ”和“-1 *”

时间:2012-08-09 02:41:17

标签: c# regex

我的字符串如下,

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“)”。

有没有办法在正则表达式中执行此操作?

非常感谢任何建议/帮助。

5 个答案:

答案 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;也不会触及该字符串。其他部分。