用于拆分数字和运算符的正则表达式

本文关键字:正则表达式 运算符 拆分 数字 用于 | 更新日期: 2023-09-27 17:56:05

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

例:

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

下面只给我数字。我也需要操作员

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

用于拆分数字和运算符的正则表达式

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

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

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

所以,使用

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

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

图案详情

  • 's* - 零个或多个空格(用于"修剪"元素)
  • ([-+/*]) - 第1组捕获-+/*
  • 's* - 零个或多个空格(用于"修剪"元素)

请参阅 IDEONE 演示:

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));

您可以使用 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);

似乎对我有用

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

仅供参考 - LinqPad是一个很棒的工具,可以在C#中测试正则表达式