![](/img/trans.png)
[英]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.