将数字与字符串中的其他符号分开

时间:2011-09-01 08:11:59

标签: c# string algorithm

我有一个包含以下内容的字符串:

"("  ")"  "&&"  "||"

和数字(0到99999)。

我想获得一个字符串并返回如下列表:

获取:

"(54&&1)||15"

return new List<string>(){
"(",
"54",
"&&",
"1",
")",
"||",
"15"}

3 个答案:

答案 0 :(得分:4)

我怀疑正则表达式会在这里做到这一点。类似的东西:

string text = "(54&&1)||15";
Regex pattern = new Regex(@"\(|\)|&&|\|\||\d+");
Match match = pattern.Match(text);
while (match.Success)
{
    Console.WriteLine(match.Value);
    match = match.NextMatch();
}

上面的棘手问题是很多东西需要逃避。 |是交替运算符,所以这是“开括号关闭括号&amp;&amp; || 至少一个数字“。

答案 1 :(得分:1)

如果您只想从字符串中提取数字,可以使用正则表达式

但是如果你想解析这个字符串并做一些公式并计算结果你应该看一下数学表达式解析器 例如,请查看此Math Parser

答案 2 :(得分:0)

这是LINQ / Lambda的方法:

var operators = new [] { "(", ")", "&&", "||", };

Func<string, IEnumerable<string>> operatorSplit = t =>
{
    Func<string, string, IEnumerable<string>> inner = null;
    inner = (p, x) =>
    {
        if (x.Length == 0)
        {
            return new [] { p, };
        }
        else
        {
            var op = operators.FirstOrDefault(o => x.StartsWith(o));
            if (op != null)
            {
                return (new [] { p, op }).Concat(inner("", x.Substring(op.Length)));
            }
            else
            {
                return inner(p + x.Substring(0, 1), x.Substring(1));
            }
        }
    };
    return inner("", t).Where(x => !String.IsNullOrEmpty(x));
};

现在你打电话给:

var list = operatorSplit("(54&&1)||15").ToList();

享受!