2015-12-20 62 views
1

我需要創建一個正則表達式,通過它我可以找到包含特定單詞/正則表達式的所有句子。正則表達式來分割包含特定單詞的句子

例如,如果我有以下文字

哈里森福特正在製作一部新電影。這部電影尚未發佈

這部電影有一個明星演員。電影中最賺錢的演員是哈里森福特。

這裏,如果我想獲得的所有句子在哪裏可以找到這個詞哈里森,我應該如何去做。正則表達式應該返回以下選擇

  • 哈里森福特正在製作一部新電影。
  • 收入最高的演員是哈里森福特在電影裏。

句子的開始和結束可以用一個新的行字符或句號來標記,或者如果它是段落的第一行。

我用下面的正則表達式

.*?((\n|.|^\\s*).*?\\b(Harrison)\\b.*?[.\n]).* 

,但我無法得到線的分裂。 我從開始到第一次哈里森福特得到這句話。

請讓我知道的任何建議,任何你可能有

+2

如何全面停止在'莫結尾的句子有償演員是哈里森福特先生在電影中。 – anubhava

+0

這解決了嗎? – user1803551

+0

是的,這是解決。請看Dukefirehawk的解決方案....和一般的作品..請看看我在該部分的評論 – vishva

回答

0

您應該使用全球標誌匹配字符串所有出現。 然後使用這個表達式來查找包含 「哈里森」 所有的句子:

(?:[\w][^.]+)?Harrison[^.]+ 

Regular expression visualization

看到一個demo here

+1

java(因爲Q被標記)沒有「全局」標誌的概念 – Bohemian

1

如果你能保證一個句子,只有一個句子用一個新行字符或句號那麼我建議你首先拆分文本,然後搜索每一行結束:

String[] sentences = text.split("\\.|\\R+"); 
for (String se : sentences) { 
    if (se.indexOf("Harrison") != -1) 
     System.out.println(se.trim()); 
} 

輸出:

Harrison Ford is working on a new Film 
Most paid actor is Harrison Ford in the film 
1

對於Java,下面的代碼應該做的伎倆

String data = "Harrison Ford is working on a new Film\n The film is yet to be released. " 
    + "The film has a gud star cast. " 
    + "Most paid actor is Harrison Ford in the film."; 

String tmpData = data.replace('\n', '.'); 
Pattern myPattern = Pattern.compile("([\\w|\\s]*Harrison[\\w|\\s]*)[\\.]"); 
Matcher m = myPattern.matcher(tmpData); 

while(m.find()) { 
    System.out.println("Result: " + m.group(1)); 
} 
+1

謝謝@Dukefirehawk,你的建議幫助我理清正則表達式。我做了一些更改,其中我處理了可以是除句號或新行外的任何詞的情景。最後一行不需要完全停止或換行。這是正則表達式,我實現了 (?i)([^ \\。\ n] *?\\ b(Harrison)(Ford)?\\ b。*?)(\\。| \ n | $ ) 即使句子包含'@'或!並且最後一行不必以'。'結尾。或新行 – vishva

相關問題