2013-11-28 26 views
4

我有以下行将句子拆分为单词并将其存储到基于空格的数组中:string[] s = Regex.Split(input, @"\s+");使用正则表达式分隔单词?

问题出在句子末尾,它也提取句点。例如:C# is cool.
的代码将存储:

  1. C#
  2. is
  3. cool.

的问题是:我如何得到它不拿起期?

+0

除了'\ s'之外,您还必须过滤其他字符。 –

+1

你可以直接使用string [] 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(); 

祝你好运!