簡體   English   中英

正則表達式拆分包含特定單詞的句子

[英]regex to split sentences containing specific words

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

例如。 如果我有以下文字

哈里森·福特(Harrison Ford)正在制作一部新電影。 這部電影尚未發行

這部電影的演員陣容很出色。 電影中收入最高的演員是哈里森·福特。

在這里,如果我想獲得所有可以在其中找到“ 哈里森 ”一詞的句子,該如何處理。 正則表達式應返回以下選擇

  • 哈里森·福特(Harrison Ford)正在制作一部新電影。
  • 電影中收入最高的演員是哈里森·福特。

句子的開頭和結尾可以用換行符,句號或如果是段落的第一行來標記。

我使用了以下正則表達式

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

但是我無法分界線。 我從一開始就知道這句話,直到第一任哈里森·福特。

如果您有任何建議,請告訴我

如果可以保證一個句子只有一個句子以換行符或句號結尾,那么建議您先分割文本,然后搜索每一行:

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

對於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));
}

您應該使用全局標志來匹配字符串中所有出現的事件。 然后使用此正則表達式查找包含“ Harrison”的所有句子:

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

正則表達式可視化

在此處查看演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM