2013-11-28 3 views
4

У меня есть следующие строки, чтобы разделить предложение на слова и хранить его в массив на основе белых пространств: string[] s = Regex.Split(input, @"\s+");Использование регулярных выражений для разделения отдельных слов?

Проблема заключается в конце предложений, она также улавливает период. Например: C# is cool.
Код будет хранить:

  1. C#
  2. is
  3. cool.

Вопрос заключается в том: Как я могу получить его, чтобы не подхватить период?

+0

Вам необходимо будет фильтровать другие символы в дополнение к '\ s'. –

+1

Вы можете использовать строку [] s = input.replace (".", ""). Split ("")? – Kairan

ответ

5

Вы можете использовать класс символов [], чтобы добавить в точку . или другие символы, которые необходимо разбить.

string[] s = Regex.Split(input, @"[\s.]+"); 

См Demo

3

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

string[] s = Regex.Split(input, @"(\s|[.;,])+"); 
+5

Я не понимаю, почему вы не просто используете '[\ s.;,] +' – HamZa

+2

@HamZa Правда, это было бы одинаково. Это мое личное предпочтение ставить специальные классы символов вне квадратных скобок, потому что я думаю, что это немного читаемо. Я согласен, что это очень субъективно. – dasblinkenlight

0

Используйте не-слово шаблон символов: \W

string[] s = Regex.Split(input, @"\W+"); 
+0

Это будет разделено на '#' также – hwnd

2
string[] s = Regex.Split(input, @"[^\w#]+"); 

Вам может понадобиться, чтобы добавить больше символов, чтобы установить [^\w#], поэтому он будет работать для вас в зависимости от ваших требований ...

0

Рассмотрите возможность использования Regex.Matches в альтернатива для вашего требования ...

string[] outputMessage = Regex.Matches(inputMessage, @"\w+").Cast<Match>().Select(match => match.Value).ToArray(); 

Удачи!

Смежные вопросы