Отделение чисел от других знаков в строке - PullRequest
2 голосов
/ 01 сентября 2011

Я получил строку, содержащую:

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

и цифры (от 0 до 99999).

Я хочу получить строку и вернуть такой список:

получить:

"(54&&1)||15"

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

Ответы [ 3 ]

4 голосов
/ 01 сентября 2011

Я подозреваю, что регулярное выражение сработает.Что-то вроде:

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

Хитрость в вышесказанном заключается в том, что многим вещам нужно убегать.|является оператором чередования, так что это «открытая скобка или закрывающая скобка или && или || или хотя бы одна цифра».

1 голос
/ 01 сентября 2011

Если вы хотите извлечь только числа из вашей строки, вы можете использовать регулярное выражение

, но если вы хотите проанализировать эту строку и сделать некоторые из них в качестве формулы и вычислить результат, вы должны взглянуть на синтаксический анализатор математических выражений, напримерпосмотрите на это Math Parser

0 голосов
/ 01 сентября 2011

Вот способ 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();

Наслаждайтесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...