[英]How to create C# Regex to Split the string with some words in quotations?
[英]How do I split a phrase into words using Regex in C#
我试图使用正则表达式将句子/短语分成单词。
var phrase = "This isn't a test.";
var words = Regex.Split(phrase, @"\W+").ToList();
单词包含“This”,“isn”,“t”,“a”,“test”
显然它正在捡起撇号并分裂。 我可以改变这种行为吗? 它还需要多语言支持各种语言(西班牙语,法语,俄语,韩语等)。
我需要将这些单词传递给拼写检查程序。 特别是Nhunspell。
return (from word in words let correct = _engine[langId].Spell(word) where !correct select word).ToList();
如果你想分成单词用于拼写检查,这是一个很好的解决方案:
new Regex(@"[^\p{L}]*\p{Z}[^\p{L}]*")
基本上你可以使用以前的正则表达式使用Regex.Split。 它使用unicode语法,因此它可以在多种语言中工作(但不适用于大多数亚洲语言)。 并且它不会破坏带有撇号或连字符的单词。
使用Split()
。
words = phrase.Split(' ');
没有标点符号。
words = phrase.Split(new Char [] {' ', ',', '.', ':', , ';', '!', '?', '\t'});
由于许多语言使用非常复杂的规则将单词串在一起成为短语和句子,因此您不能依赖简单的正则表达式来从一段文本中获取所有单词。 即使对于像英语这样“简单”的语言,你也可以在许多角落案例中运行,例如:
众所周知,中文和日文(以及其他)难以用这种方式解析,因为这些语言不在单词之间使用空格,只在句子之间使用空格。
您可能希望阅读文本分割 ,如果分割对您很重要,请投资可以解析整个文本的拼写检查器或文本分割引擎,该引擎可以根据语言规则将您的句子分成单词。
我找不到一个基于.NET的多语言分段引擎,但快速谷歌搜索。 抱歉。
看起来你真的不需要正则表达式。 你可以这样做:
phrase.Split(" ");
你想分开什么? 空间? 标点? 你必须决定停止字符是什么。 使用空格和一些标点字符的简单正则表达式将是"[^.?!\\s]+"
。 这会分解句号,问号,感叹号和任何空白字符。
如果您尝试仅基于空格进行拆分,则可以尝试。
var words = Regex.Split(phrase, @"[^ ]+").ToList();
另一种方法是通过将撇号添加到您的角色类来添加撇号。
var words = Regex.Split(phrase, @"(\W|')+").ToList();
否则,是否有一个特定的原因,你不能使用string.Split()? 这似乎更直截了当。 此外,您还可以传入其他标点字符(即拆分。以及空格)。
var words = phrase.Split(' ');
var words = phrase.Split(new char[] {' ', '.'});
我不是一个java人,但你可以尝试在分裂时排除标点符号
空间同时。 也许这样的事情。
这些是原始的和扩展的正则表达式,单词在捕获组1中。
进行全球搜索。
Unicode(doesen't帐户的字形)
[\s\pP]* ([\pL\pN_-] (?: [\pL\pN_-] | \pP(?=[\pL\pN\pP_-]) )* )
ASCII
[\s[:punct:]]* (\w (?: \w | [[:punct:]](?=[\w[:punct:]]) )* )
这对我有用: [^(\\d|\\s|\\W)]*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.