簡體   English   中英

在正則表達式中查找2個之間不包含單詞的單詞

[英]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)";

查看正則表達式演示 | Java演示

說明

  • (?:非捕獲組
    • \\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.

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