如果滿足某些條件,我正在嘗試匹配一個數字:如果 word1 后面跟著 word2 在數字之前,我想匹配 word1 之前的第一個數字;如果 word1 后面是 word2 之前的數字,那么我希望第一次出現后面跟 word1 的數字。
我已經嘗試過使用兩種相反的外觀: (?=regex)then|(?!regex)else 但它不起作用。有人可以告訴我我做錯了什么嗎?
(?=(word1[\s\S] ?word2[\s\S] ?[\d\.]{1,},\d{2}\s EUR))((?<=word4)[\s\S] ?([\d\.]{1,},\d{2})\s EUR[\s\S] ?(?=word1))|(?!word1[\s\S] ?[\d\.]{1,},\d{2}\s EUR[\s\S] ?word2)word1[\s\S] ?([\d\.]{1,},\d{2})\s EUR
下面是一些具體的例子:
情況1
\n28.000,00 EUR\nword3\n308,24 EUR\nword4\nword5\nword1\n2.096,64 EUR\nword2\n308,24 EUR 預期匹配:2.096,64
案例2
\n28.000,00 EUR\nword3\n308,24 EUR\nword4\n2.096,64 EUR\nword5\nword1\nword2\n308,24 EUR 預期匹配:2.096,64
我在正則運算式中使用了 word4 作為錨點,以匹配 word1 之前的第一個數字。word4 不是必需的,可以忽略。
https://regex101.com/r/F8uQZU/2
uj5u.com熱心網友回復:
您可以使用 2 個捕獲組來獲取值,|兩種情況都可以交替使用:
(\d{1,3}(?:\.\d{3})*,\d{2}) EUR(?:(?!\d{1,3}(?:\.\d{3})*,\d{2}).)*word1\\nword2|word1(?:(?!\\nword2).)*?(\d{1,3}(?:\.\d{3})*,\d{2}) EUR
模式匹配:
(捕獲組 1\d{1,3}匹配 1-3 位數字(?:\.\d{3})*可選擇重復匹配.和 3 位數字,\d{2}匹配,和 2 位數字
) EUR, and match在它之后關閉捕獲組EUR`(?:非捕獲組(?!\d{1,3}(?:\.\d{3})*,\d{2}).負前瞻,斷言不是右側的數字格式,如果是,則使用點匹配除換行符以外的任何字符
)*關閉非捕獲組并可選擇重復它以匹配所有字符word1\\nword2比賽word1\nword2|或者word1從字面上匹配(?:(?!\\nword2).)*?負前瞻,斷言不\nword2向右,如果是,則匹配除使用點的換行符以外的任何字符。盡可能少地再次重復外部非捕獲組,使量詞非貪婪(\d{1,3}(?:\.\d{3})*,\d{2}) EUR捕獲組2中的數字格式并匹配以下EUR
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409285.html
標籤:
上一篇:正則運算式需要很長時間來評估
