如何在c#中获取字符串的所有单词?

我在一个字符串中有一个段落,我想得到该段落中的所有单词。

我的问题是我不希望后缀的单词以标点符号结尾,例如(’,’,’。’,”’,”’,’;’,’:’,’!’,’? ‘)和/ n / t等

我也不想要像world's那样只会回归世界的话语。

he said. "My dog's bone, toy, are missing!"的例子中he said. "My dog's bone, toy, are missing!" he said. "My dog's bone, toy, are missing!"

名单应该是: he said my dog bone toy are missing

根据Shan的回答 ,我会考虑这样的出发点:

 MatchCollection matches = Regex.Match(input, @"\b[\w']*\b"); 

为什么包括'角色? 因为这会阻止像“我们”这样的单词被分成两个单词。 捕获后,您可以自己手动删除后缀(否则,您无法识别re不是单词而忽略它)。

所以:

 static string[] GetWords(string input) { MatchCollection matches = Regex.Matches(input, @"\b[\w']*\b"); var words = from m in matches.Cast() where !string.IsNullOrEmpty(m.Value) select TrimSuffix(m.Value); return words.ToArray(); } static string TrimSuffix(string word) { int apostropheLocation = word.IndexOf('\''); if (apostropheLocation != -1) { word = word.Substring(0, apostropheLocation); } return word; } 

示例输入:

 他说。  “我的狗的骨头,玩具,都不见了!” 顺便问一下,今晚你在做什么? 

输出示例:

  [他说,我的,狗,骨头,玩具,是,失踪,什么,你,做,今晚,通过,方式] 

这种方法的一个限制是它不能很好地处理首字母缩略词; 例如,“YMCA”将被视为四个单词。 我认为也可以通过包括来处理. 作为一个字符匹配一个单词然后剥离它如果它是一个句号后完全停止(即通过检查它是单词中的唯一句点以及最后一个字符)。

希望这对你有所帮助:

  string[] separators = new string[] {",", ".", "!", "\'", " ", "\'s"}; string text = "My dog's bone, toy, are missing!"; foreach (string word in text.Split(separators, StringSplitOptions.RemoveEmptyEntries)) Console.WriteLine(word); 

请参阅正则表达式单词边界表达式 , 计算richtextbox中所有单词的最有效方法是什么? 。 故事的道德是有很多方法来解决问题,但正则表达式可能是简单的方法。

在空格上拆分,修剪结果字符串上不是字母的任何内容。

这是一个循环替换方法……不是很快,但是解决它的方法……

string result = "string to cut ' stuff. ! out of";

".',!@".ToCharArray().ToList().ForEach(a => result = result.Replace(a.ToString(),""));

这假设您要将其放回原始字符串中,而不是新字符串或列表。