簡體   English   中英

RegEx匹配一組單詞之間的字符串

[英]RegEx to match a string between a set of words

我試圖匹配字符串中兩個單詞之間的一組單詞。 我將使用Java RegEx。

輸入文本

The clever fox JUMPED OVER the big dog and ran away.

預期產出

the big

使用RegEx

(?<=(fox\s[A-Z0-9]*))(?s)(.*?)(?=\sdog)

我得到低於輸出,這給了我狐狸和狗之間的所有單詞

JUMPED OVER the big

單詞“fox”將始終跟隨一個或多個全部大寫單詞 我需要匹配這兩個詞之后的所有單詞,直到我得到“狗”

此外,我需要在Capture Group 0中獲得所需的輸出。我不能使用不同的捕獲組。 這是我的申請中的限制。

非常感謝任何幫助。

我擔心java 不支持斷言后面的變長長度

另外, 捕獲組0是全文 ,由於不允許可變長度的lookbehinds(如前所述)是不可能的,除非你知道總是會有一定長度的大寫單詞。

要使用捕獲組1執行此操作,請嘗試:

(?<=fox)(?:\s[A-Z0-9]*)*\s?(.*?)(?=\sdog)

編輯:修正了正則表達式中的拼寫錯誤

編輯2:澄清全文問題。

編輯3:取決於愚蠢的java如何使用“非顯而易見的最大長度的lookbehind組”,這可能有效: (?<=fox(?:\\s[A-Z0-9]{5,7}){1,2})(.*?)(?=\\sdog)但我需要問一下,是什么讓你確定你需要這個才能成為捕獲組0? 我有點懷疑是這樣的,即使它確實你可以只取輸出然后再次運行它來獲取.*以獲得捕獲組0的正則表達式,你真的不需要這個作為一個要求。

你可以使用這個正則表達式:

^.*fox[A-Z0-9\s]*(.*)dog.*$

您可以通過函數中的參數傳遞foxdog ,以便在其他情況下使用。

沒有正則表達式:

    String fox = "The clever fox JUMPED OVER the big dog and ran away.";

    boolean start = false;
    for (String word : fox.split("\\s")) {
        if ("fox".equals(word)) {
            start = true;
            continue;
        }
        if ("dog".equals(word)) {
            break;
        }
        if (start) {
            System.out.println(word);
        }
    }

暫無
暫無

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

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