-1

我有如下字符串,

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

有没有办法在正则表达式中做到这一点?

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

4

5 回答 5

2

在您的示例中,您可以替换-(-1*(, 这似乎是您想要的,但这实际上取决于您的确切字符串。例如,在您的示例中,Test - KB- 永远不会被替换,因为它不是字符串的一部分,而是添加到字符串中的计算。

于 2012-08-09T02:54:40.697 回答
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);
于 2012-08-09T03:48:20.180 回答
0

您可以尝试使用此正则表达式仅匹配由“(”放置的“-”

[^-]+(-)(?:()[^-]

于 2012-08-09T02:59:05.143 回答
0

试试这个代码:

using System.Text.RegularExpressions;

string str  =  "FX(Y + 1, -(5 * 10) + FML(\"Test - KB\")";
string r = new Regex("-[(]").Replace(str,"-1*(");

此代码找到 -( 并替换为 -1*(

于 2012-08-09T02:59:20.053 回答
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)

请注意,即使字符串“看起来像”其他部分,它也不会被触及。

于 2012-08-09T03:17:25.937 回答