从表达式中获取负数



我正在尝试分离字符串表达式上的标记。表达式如下:

-1-2+-3

这是我正在使用的正则表达式:

[d.]+|[-][d.]+|+|-|*|/|^|(|)

这给我带来了这些匹配:

-1
-2
+
-3

我期待着:

-1
-
2
+
-3

有什么想法可以把负数和运算符区分开吗?

也许你可以试试这个;它利用了一个背后的视角:

((?<=d)[+*/^()-]|-?[d.]+)

我在这里测试过。

基本上,确保在操作员决定匹配什么之前有一个数字。因此,如果运算符前面有一个数字,请单独处理运算符,否则,将减号与数字组合。

编辑:将括号与批次分开,以防万一(演示):

((?<=d)[+*/^-]|[()]|-?[d.]+)

这个模式应该满足您的需求:

^(?:(?<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 

相关内容

  • 没有找到相关文章

最新更新