Исключение из строки скобок в Regex

Спличу строку таким образом:

string[] Funct = Regex.Split(Function.Task, @"-?([\W])");

Почему в массиве появляются "", и остаются скобки, если сплитить такое выражение: 5*6-(2+х)

P.S Массив должен получиться такого вида: "5", "*", "6", "-", "2", "+", "x". Естественно, строковый.


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Скобки остаются, потому что вы их "захватили" с помощью захватывающей подмаски.

Вы можете использовать

var results = Regex.Matches(text, @"[^()\w]+|\w+")
    .Cast<Match>()
    .Select(x => x.Value)
    .ToList();

Подробности

  • [^()\w]+ - один и более символов, отличных от буквенно-цифровых символов или символов нижнего подчёркивания, а также ( и )
  • | - или
  • \w+ - один и более буквенно-цифровых символов или символов нижнего подчёркивания

См. пример работы регулярного выражения:

введите сюда описание изображения

→ Ссылка