Разбить строку, используя несколько строк с разделителями в конечном массиве - PullRequest
0 голосов
/ 25 января 2020

Я искал и обнаружил, что могу разбить строку, например " x + = 10 ", используя несколько строк, чтобы я получил результат {"x", "10"} но я хочу иметь разделители и в конечном массиве, так что это будет {"x", "+", "=", "10"} с использованием разделителей " +"и" =". Код, который я использовал: var words = code.Split(Actions.available, StringSplitOptions.RemoveEmptyEntries);

1 Ответ

3 голосов
/ 25 января 2020

Используйте регулярные выражения для анализа текста. Используя эти правила при создании совпадения текста.

  • Любое последовательное число
  • Любой последовательный текст
  • Отдельный разделитель, такой как + или - или =. Это набор в регулярном выражении
  • Игнорировать любые пробелы.

Результат от Regex.Matches является выводом токена:

enter image description here

Код

var input = "x += 10";
var pattern = @"(\w+|[-=+])";

Regex.Matches(input, pattern)
     .OfType<Match>()
     .Select(mt => mt.Value);

Альтернативный с Regex Split

Если кто-то использует Regex.Split с тем же шаблоном, он разбивается на все, как мы указали выше, но также помещает , добавляет в пробелы из-за его дизайна.

enter image description here

Но чтобы компенсировать это добавлением вызова расширения linq в результирующий список, мы можем удалить пробелы и получить тот же ответ.

Regex.Split(input, @"(\w+|[-=+])")
     .Where(str => !string.IsNullOrWhiteSpace(str))

результат { "x", "+", "=", "10" }

...