用数字和符号分割字符串c#

时间:2013-05-11 17:50:22

标签: c# regex

我想拆分以下字符串

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

3 个答案:

答案 0 :(得分: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();

这会给你:

enter image description here

答案 1 :(得分: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();

答案 2 :(得分:0)

您可以使用此正则表达式拆分

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

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