我想用使用正则表达式的字母替换数学表达式中的所有浮点数。这就是我尝试过的:
Regex rx = new Regex("[-]?([0-9]*[.])?[0-9]+");
string expression = "((-30+5.2)*(2+7))-((-3.1*2.5)-9.12)";
char letter = 'a';
while (rx.IsMatch(expression))
{
expression = rx.Replace(expression , letter.ToString(), 1);
letter++;
}问题是,如果我有(5-2)+3,它将把它替换为:(ab)+c
所以它得到了-2作为一个数字,但我不想那样。
我对Regex没有经验,但我想我需要这样的东西:
检查“-”,如果有-,检查它前面是否有数字或右括号。如果有,而不是,那么保存'-‘。之后检查数字+点+数字
我的上述Regex也适用于类似于:.2 .3 .4之类的值,但我不需要这样做,它应该是显式的:0.2 0.3 0.4
发布于 2018-06-12 21:15:13
按照建议的逻辑,您可以考虑
(?:(?<![)0-9])-)?[0-9]+(?:\.[0-9]+)?见regex演示。
Regex详细信息
(?:(?<![)0-9])-)? -可选的非捕获组匹配1或0出现的(?<![)0-9]) -字符串中没有紧跟)或数字的位置- -a-
[0-9]+ - 1+数字(?:\.[0-9]+)? -一个可选的非捕获组,匹配1或0出现的.,后面跟着1+数字。在代码中,最好使用匹配评估器(请参阅C#在线演示):
Regex rx = new Regex(@"(?:(?<![)0-9])-)?[0-9]+(?:\.[0-9]+)?");
string expression = "((-30+5.2)*(2+7))-((-3.1*2.5)-9.12)";
char letter = (char)96; // char before a in ASCII table
string result = rx.Replace(expression, m =>
{
letter++; // char is incremented
return letter.ToString();
}
);
Console.WriteLine(result); // => ((a+b)*(c+d))-((e*f)-g)https://stackoverflow.com/questions/50825615
复制相似问题