[英]Find words between 2 not includes words in the results with regex
我試圖找到解決方案,但找不到。
一個正則表達式,它在單詞“(Dd)og(s)”和“(Cc)at(s)”之間選擇所有超過3個字符的單詞。 使用正則表達式。 Java中的結果中不應包含單詞“(Dd)og(s)”和“(Cc)at(s)”。 我發現:
(?<=(^?\b[Dd]ogs?\b\s?|^?\b[Cc]ats?\b\s?)).*(\b[a-zA-Z']{4,}\b)*(?=(\b[Dd]ogs?\b\s|\b[Cc]ats?\b\s))
它可以工作,但給出的單詞少於3個字符。
因為在注釋(?i)((?<=(^?dogs? |^?\\s?cats? ))(.*?)(?=(dogs?|cats?)))
使用正向后看和正向前看以匹配貓或狗,因此只需要獲得4個加字符的長字即可,您可以使用\\G
斷言上一場比賽的結束。
例如:
(?:\b(?:dog|cat)s?|\G)\s+(?:((?!(?:dog|cat)s?\b)\w{3,})|\S+)(?=.*?\s+(?:dog|cat)s?\b)
在Java中:
String regex = "(?:\\b(?:dog|cat)s?|\\G)\\s+(?:((?!(?:dog|cat)s?\\b)\\w{3,})|\\S+)(?=.*?\\s+(?:dog|cat)s?\\b)";
說明
(?:
非捕獲組
\\b(?:dog|cat)s?
字邊界,用可選的s匹配狗或貓 |
要么 \\G
在上一場比賽的末尾聲明位置 )
關閉非捕獲組 \\s+
匹配1+個空格字符 (?:
非捕獲組
(
捕獲組
(?!(?:dog|cat)s?\\b)\\w{3,}
負向檢查以檢查后面不是帶可選s的狗或貓。 如果是這種情況,則將單詞char匹配3次以上 )
關閉捕獲組 |
要么 \\S+
匹配1+個非空格字符,因為我們無法匹配\\w{3,}
)
關閉非捕獲組 (?=.*?\\s+(?:dog|cat)s?\\b)
斷言右邊的肯定預測是狗或貓,帶有可選的s
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.