我想编写计算软件,对于我使用Regex.Matches()的操作员的单独数字。但是我使用图像显示了一个错误。另外,数学表达式是:
5 * 10-18 /(3 + 19)
public class Tokenization
{
public string MathExpression { get; set; }
public Tokenization(string expression)
{
MathExpression = expression;
}
public List<string> MathExpressionParser()
{
int number;
List<string> tokenList = new List<string>();
List<string> tL = new List<string>();
var numbersAndOperators = Regex.Matches(MathExpression, "(['*,+,/,-,),(']+)|([0-9]+)");
foreach (var item in numbersAndOperators)
{
tokenList.Add(item.ToString());
Debug.WriteLine(item.ToString());
}
return tokenList;
}
}
}
答案 0 :(得分:4)
您可以使用以下表达式:
string expr = "5*10-18/(3+19)";
foreach(var match in Regex.Matches(expr, @"([*+/\-)(])|([0-9]+)"))
{
Console.WriteLine(match.ToString());
}
结果:
5
*
10
-
18
/
(
3
+
19
)
答案 1 :(得分:2)
删除+
,因为您匹配的所有运算符都是单字符。不要忘记逃避-
,它应该是\-
。也没有必要用逗号和引号。
结果是:
([*+/\-)(])|([0-9]+)
此外,将@
放在正则表达式字符串之前,以避免过多的转义。或者,使用双-
转义\\
:
([*+/\\-)(])|([0-9]+)
答案 2 :(得分:0)
对十进制值进行了小幅改进。
使用以下命令更新reg-x。
@"([*+/\-)(])|([0-9.]+|.)"