如何将下面的字符串拆分为数字和运算符分隔的字符串列表(字符串不包含括号或负数)。
示例:
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
还将输出结果中所有捕获的子字符串:
If capturing parentheses are used in a Regex.Split expression, any captured text is included in the resulting string array.
所以,使用
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));
关于c# - 正则表达式来分割数字和运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38284924/