首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用字母变量代替数学方程中的浮点数

用字母变量代替数学方程中的浮点数
EN

Stack Overflow用户
提问于 2018-06-12 20:47:11
回答 1查看 83关注 0票数 4

我想用使用正则表达式的字母替换数学表达式中的所有浮点数。这就是我尝试过的:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-12 21:15:13

按照建议的逻辑,您可以考虑

代码语言:javascript
复制
(?:(?<![)0-9])-)?[0-9]+(?:\.[0-9]+)?

regex演示

Regex详细信息

  • (?:(?<![)0-9])-)? -可选的非捕获组匹配1或0出现的
    • (?<![)0-9]) -字符串中没有紧跟)或数字的位置
    • - -a-

  • [0-9]+ - 1+数字
  • (?:\.[0-9]+)? -一个可选的非捕获组,匹配1或0出现的.,后面跟着1+数字。

在代码中,最好使用匹配评估器(请参阅C#在线演示):

代码语言:javascript
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50825615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档