我有一个正则表达式:[ - ]?\ d + [ - + ^ / \ d] 和这行代码:
foreach(Match m in Regex.Matches(s, "[-]?\d+[-+*^/\d]*")){
...
}
m.Value =(例如)2 + 4 * 50
有没有办法以{“2”,“+”,“4”,“*”,“50”}的形式获得字符串数组?
答案 0 :(得分:3)
首先,你的正则表达式错了。你有一个与整个字符串匹配的正则表达式,但你想在字符串边界上拆分字符串,所以你想要识别标记。
其次,不要试图解决-
是一元减号还是一个运算符的问题。这是一个解析问题。
第三,您可以使用普通的LINQ运算符将匹配集合转换为字符串数组。
把它们放在一起:
string s = "10*20+30-40/50";
var matches =
Regex.Matches(s, @"\d+|[-+*/]")
.Cast<Match>()
.Select(m => m.Value)
.ToArray();
这种技术只有在你的词汇语法是规则的时候才有效,而很多都不是。 (甚至一些技术上常规的语言也不方便将其描述为正则表达式。)正如我在评论中指出的那样:写一个词法分析器并不难。考虑只写一个词法分析器而不是使用正则表达式。
答案 1 :(得分:0)
您可以尝试拆分字边界
var st = "2+4*50";
var li = Regex.Split(st, @"\b");
foreach (var i in li)
Console.WriteLine(i);
2
+
4
*
50