用于拆分数字和运算符的正则表达式
本文关键字:正则表达式 运算符 拆分 数字 用于 | 更新日期: 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#中测试正则表达式