正则表达式分割数字和运算符

时间:2016-07-09 18:21:27

标签: c# regex

如何将字符串下面的字符串拆分为数字和运算符分隔的字符串(字符串不包含括号或负数)。

示例:

inputString  =  1+2-2.3*4/12.12
outputList =   {1,+,2,-,2.3,*,4,/,12.12}

下面只给我数字。我也需要运营商

var digits = Regex.Split(inputString  , @"\D+");

3 个答案:

答案 0 :(得分:2)

由于您确认输入的结构相当简单 - 没有括号,没有负数 - 您可以使用简单的\s*([-+/*])\s*正则表达式来分割字符串。

请注意,Regex.Split还会在结果中输出所有捕获的子字符串

  

如果在Regex.Split表达式中使用捕获括号,则任何捕获的文本都包含在结果字符串数组中。

所以,使用

Regex.Split(input, @"\s*([-+/*])\s*")
                    .Where(n => !string.IsNullOrEmpty(n))
                   .ToList();

不要忘记从结果列表/数组中删除空元素。

模式详情

  • \s* - 零个或多个空格(“修剪”元素)
  • ([-+/*]) - 第1组抓取-+/*
  • \s* - 零个或多个空格(“修剪”元素)

请参阅IDEONE demo

var input = "1+2-2.3*4/12.12";
var results = Regex.Split(input, @"\s*([-+/*])\s*")
                .Where(n => !string.IsNullOrEmpty(n))
                .ToList();
Console.WriteLine(string.Join("\n", results));

答案 1 :(得分:0)

您可以使用Regex.Matches而不是Regex.Split:

var test = "1 + 2 - 2.3 * 4 / 12.12";
foreach(Match match in Regex.Matches(test, @"\d+(,\d+)*(\.\d+(e\d+)?)|\d+|[\\+-\\*]"))
    Console.WriteLine(match.Value);

答案 2 :(得分:0)

这似乎对我有用

/([\d\.]+)|([+-\/\*])+/g

仅供参考 - LinqPad是一款在C#中测试Regex的绝佳工具