[英]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.*$
您可以通過函數中的參數傳遞fox
和dog
,以便在其他情況下使用。
沒有正則表達式:
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.