我試圖將一個字符串拆分爲「句子」,但我遇到了一個跟蹤單詞的問題。例如:正則表達式句子拆分
"This isn't cool. This doesn't work. This"
應該分成
[This is cool., This doesn't work., This]
到目前爲止,我一直在使用"[^\\.!?]*[\\.\\s!?]+"
但無法弄清楚如何調整這個拖尾字,因爲沒有終止字符,因此沒有什麼可尋找的。有什麼我可以添加或我需要完全調整它?
我試圖將一個字符串拆分爲「句子」,但我遇到了一個跟蹤單詞的問題。例如:正則表達式句子拆分
"This isn't cool. This doesn't work. This"
應該分成
[This is cool., This doesn't work., This]
到目前爲止,我一直在使用"[^\\.!?]*[\\.\\s!?]+"
但無法弄清楚如何調整這個拖尾字,因爲沒有終止字符,因此沒有什麼可尋找的。有什麼我可以添加或我需要完全調整它?
而是分裂字符串中,你可以找到所有的句子匹配尾隨句話你可以使用錨$
將字符串的結尾匹配和:
List<String> sentences = new ArrayList<String>();
Matcher m = Pattern.compile("[^?!.]+(?:[.?!]|$)")
.matcher("This isn't cool. This doesn't work. This");
while (m.find()) {
sentences.add(m.group());
}
String s = "This isn't cool. This doesn't work. This";
System.out.println(Arrays.toString(s.split("\\. ")));
產地:
[This isn't cool, This doesn't work, This]
您也可以安全地將最後的+
更改爲*
。
正則表達式默認爲貪婪,每個單獨的部分將抓取儘可能多的數據。這意味着第一個子表達式將匹配
This isn't cool
和下一部分的時期和空間 - 僅此而已。將加號改爲星號不會改變此行爲。在字符串內部,所有的句子結尾字符都會匹配,並且最後沒有什麼可以匹配 - 這與*
有效。
我在手機上,不能測試這個,但是你應該嘗試添加字符串元字符'$'的結尾到你的第二系列字符。 – brittenb
我不會投票關閉它作爲[將字符串拆分成基於句點的句子]的副本(http://stackoverflow.com/questions/2687012/split-string-into-sentences-based-on-periods),因爲您的標題明確指出你想使用正則表達式,但考慮使用其他工具來描述所描述的問題。 – Pshemo