Разделение строки на слова и знаки пунктуации в очереди

Вот шаблон, который я использую сейчас:

string pattern = @"^(\s+|\d+|\w+|[^\d\s\w])+$";

Regex regex = new Regex(pattern);
if (regex.IsMatch(inputString))
{
      Match match = regex.Match(inputString);

      foreach (Capture capture in match.Groups[1].Captures)
      {
           if (!string.IsNullOrWhiteSpace(capture.Value))
               tmpList.Add(capture.Value);
      }
 }
 return tmpList.ToArray<string>();

При этом я получаю массив строк, по элементу для каждого слова и по одному элементу для каждого знака препинания.

Чего я хотел бы добиться сейчас, так это сгруппировать символы пунктуации в очереди только в одном элементе, т.е. на данный момент, если есть три точки одна за другой, я получаю три элемента в своем массиве, каждый из которых содержит точку. В конечном счете, я хотел бы иметь один элемент с тремя точками (или любым другим знаком препинания, если на то пошло).


person Louitbol    schedule 08.12.2013    source источник


Ответы (2)


Попробуйте со следующим шаблоном. Я добавил лишний +. Дайте мне знать, если вы намеревались что-то еще. Надеюсь, поможет.

string pattern = @"^(\s+|\d+|\w+|[^\d\s\w]+)+$";

Для inputString = "abc;..cbe;aaa...kjaskjas" я получаю такой результат:

abc
;..
cbe
;
aaa
...
kjaskjas
person Adarsh Shah    schedule 08.12.2013

Попробуйте это регулярное выражение:

^(\s+|\d+|\w+|[^\d\s\w]+)+$

Описание

Визуализация регулярных выражений

person Stephan    schedule 08.12.2013
comment
Могу я спросить, как вы построили эту аккуратную схему? - person Louitbol; 09.12.2013