簡體   English   中英

正則表達式獲取帶有特定單詞的句子

[英]Regex get sentence with specific word

我有很多看起來像這樣的文字(這是示例):

一些隨機的字符串,內容等,沒有什么特別的OPENING BY XZXDS我想得到的第一個文本。 另一個隨機字符串,一些不必要的新聞等。關閉第二個我想要的文本。 然后我想獲得更多內容和內容OPENX BY LLXAS。 再次無聊的新聞,我希望得到的第四封文字都沒有結束。 等等...

我想得到每個包含單詞的句子:TEXT。 例如,在這種情況下,我將得到:

我想得到的第一個文本。

我想得到的第二個文本。

我想得到的第三條文字。

我想得到的第四個文本。

我認為可能的方式是:在我的文本中有隨機文本,但是此文本始終以“ OPENING BY XXXX”或“ CLOSING”結尾。 因此,我認為我可以得到介於“ OPENING BY XXXX”或“ CLOSING”與“”之間的文本。 (點)。 XXX可以不同,需要排除。 可以為正則表達式功能提供幫助嗎?

只需排除OPENING BY之前的所有內容,排除OPENING BY之后的一個單詞,得到我的文字,直到達到“”為止。

我曾經有過類似的東西,但是它更容易,因為我得到了兩個點之間帶有特定單詞的句子。 現在我的句子之間沒有兩個點。 我正在添加以前的代碼:

String pattern = "[^\.]*\bSPECIFICWORD\b[^\.]*"

我認為我們可以保留第二部分,但是第一部分需要修改。

我的Java應用程序需要它。 謝謝你的幫助。

    Pattern p = Pattern.compile("(?:(?:opening by [^ ]+)|(?:closing))"
            + "((?:[^\\.]*? )*TEXT(?:[^\\.]*?))\\."
            , Pattern.CASE_INSENSITIVE);
    final String text = "random text random text random text opening "
            + "by xysd FIRST TEXT I WANT TO GET. random text random "
            + "text random text closing SECOND TEXT I WANT TO GET. "
            + "random text random text random text opening by lxcvznk "
            + "THIRD TEXT. random text random text random text random "
            + "text closing FOURTH TEXT...etc";
    Matcher m = p.matcher(text);
    while(m.find())
    {
        System.out.println(m.group(1));
    }

輸出:

 FIRST TEXT I WANT TO GET
 SECOND TEXT I WANT TO GET
 THIRD TEXT
 FOURTH TEXT

(?:opening by [^ ]+)|(?:closing))以“以xxx開頭”或“關閉”開頭

(?:[^\\\\.]*? )*任何非點字符后跟空格(取決於您的需要,可以排除空格)零次或多次

(?:[^\\\\.]*?))\\\\. 非點序列,后跟。

如果文本輸入非常大,則單個正則表達式可能不是最佳方法,搜索前綴然后顯式點字符可能更快。

如評論中所述,如果要捕獲包含兩個單詞中的任何一個的句子,例如ONE或ANOTHER,只需將TEXT替換為(?:ONE|ANOTHER) 在“邏輯運算符”部分的“ 模式”文檔中對此進行了描述。

如果您想知道您到底捕獲了哪個,可以使用捕獲組(ONE|ANOTHER)並將其放入matcher.group(2)

    Pattern p = Pattern.compile("(?:(?:opening by [^ ]+)|(?:closing))"
            + "((?:[^\\.]*? )*(ONE|ANOTHER)(?:[^\\.]*?))\\."
            , Pattern.CASE_INSENSITIVE);
    final String text = "random text random text random text opening "
            + "by xysd FIRST ONE I WANT TO GET. random text random "
            + "text random text closing SECOND ANOTHER I WANT TO GET. "
            + "random text random text random text opening by lxcvznk "
            + "ANOTHER TEXT. random text random text random text random "
            + "text closing FOURTH ONE...etc";
    Matcher m = p.matcher(text);
    while(m.find())
    {
        System.out.println(m.group(1) + "<-" + m.group(2));
    }

FIRST ONE I WANT TO GET<-ONE
SECOND ANOTHER I WANT TO GET<-ANOTHER
ANOTHER TEXT<-ANOTHER
FOURTH ONE<-ONE

暫無
暫無

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

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