1

我想拆分以下字符串

5 + 91 * 6 + 8 - 79 

结果得到一个数组,它将像这样以相同的顺序保存所有元素(包括符号){5, +, 91, *, 6, +, 8, -, 79}

我不能用空格分割它,因为字符串也可以是这样的,5 + 91* 6+ 8 -79或者根本没有空格5+91*6+8-79

我试过这个

 string[] result = Regex.Split(str, @"[\d\+\-\*]{1,}");

但是当我尝试这个时,它在 cmd 上什么也不返回

foreach (string value in result)
    {

         Console.WriteLine(value);
    }
4

3 回答 3

3

您正在寻找Matches()

string str = "5 + 91* 6+ 8 -79";

MatchCollection result = Regex.Matches(str, @"\d+|[\+\-\*]");

foreach (var value in result)
{
     Console.WriteLine(value);
}

Console.ReadLine();

这给了你:

在此处输入图像描述

于 2013-05-11T17:59:37.190 回答
3

你可以用一点 Linq 做到这一点:

string[] result = Regex.Matches(str, @"\d+|[\+\-\*]")
                       .Cast<Match>().Select(m => m.Value).ToArray();

或者在查询语法中:

string[] result = 
    (from m in Regex.Matches(str, @"\d+|[\+\-\*]").Cast<Match>()
     select m.Value)
    .ToArray();
于 2013-05-11T18:00:25.827 回答
0

你可以用这个正则表达式拆分它

(?<=\d)\s*(?=[+*/-])|(?<=[+*/-])\s*(?=\d)

是的,它很长,但它确实拆分了字符串!

于 2013-05-11T18:08:07.950 回答