2013-01-10 47 views
2

可能重複:
What is a regular expression for parsing out individual sentences?提高正則表達式來大文本分割成句子

我想大的文本拆分成句。正則表達式表達我的答案here

string[] sentences = Regex.Split(mytext, @"(?<=[\.!\?])\s+"); 

所以我想用一個模式做這樣 分裂如果.?!遵循spacecapital信比做分裂了。
大寫字母表示句首。

text = " Sentence one . Sentence e.g. two ? Sentence three. 
sentence[1] = Sentence one 
sentence[2] = Sentence e.g. two 

對於有問題的情況下,類似縮寫我打算做更換

mytext.replace("e.g.","eg"); 

如何在正則表達式實現這一點?

+3

看看這個[問題和答案](http://stackoverflow.com/questions/1936388/what-is-a-regular-expression-for-parsing-out-individual-sentences)。我真的會轉向NLP解析器,而不是做正則表達式。 – Candide

+0

您是否試過像這樣添加'[A-Z]:'(?<= [\。!\?])\ s [A-Z] +'? – rayfranco

+1

如果大寫字母開頭的句子(在你的用例..)..爲什麼不用他們使用正常的分裂函數分裂? –

回答

5

\p{Lt}表示一個Unicode大寫字母(包括口音等),所以

string[] sentences = Regex.Split(mytext, @"(?<=[.!?])\s+(?=\p{Lt})"); 

應該做你想要什麼。

(請注意,我不認爲.?需要一個字符類,所以我已經刪除它們也可以逃過一劫,但做檢查,這仍然與這些人物的作品。)

但是,請注意這將仍然分裂,例如Mr. Jones ...

+2

@「(?<= [。!?])\ s +(?= [A-Z])」正常工作。謝謝 –