我正在尝试将字符串表达式上的标记分开。表达式如下所示:
-1-2+-3
这是我正在使用的正则表达式:
[\d\.]+|[-][\d\.]+|\+|\-|\*|\/|\^|\(|\)
这给我带来了这些比赛:
-1
-2
+
-3
我在期待:
-1
-
2
+
-3
任何想法如何区分运营商的负数?
答案 0 :(得分:3)
也许你可以试试这个;它利用了一个后视:
((?<=\d)[+*\/^()-]|\-?[\d.]+)
我测试了它here。
基本上,确保在操作员之前有一个数字来决定匹配什么。因此,如果操作员之前有一个数字,则单独处理操作员,否则,将减号与数字组合。
编辑:将抽屉与抽签分开,以防万一(demo):
((?<=\d)[+*\/^-]|[()]|\-?[\d.]+)
答案 1 :(得分:1)
这种模式应该可以满足您的需求:
^(?:(?<num>-?[\d\.]+)(?:(?<op>[-+*/^])|$))+$
例如:
var input = "-1-2+-3";
var pattern = @"^(?:(?<num>-?[\d\.]+)(?:(?<op>[-+*/^])|$))+$";
var match = Regex.Match(input, pattern);
var results =
from Group g in match.Groups.Cast<Group>().Skip(1)
from Capture c in g.Captures
orderby c.Index
select c.Value;
将产生:
-1
-
2
+
-3