如何将字符串下面的字符串拆分为数字和运算符分隔的字符串(字符串不包含括号或负数)。
示例:
inputString = 1+2-2.3*4/12.12
outputList = {1,+,2,-,2.3,*,4,/,12.12}
下面只给我数字。我也需要运营商
var digits = Regex.Split(inputString , @"\D+");
答案 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的绝佳工具