Regex101 測試:https ://regex101.com/r/Yfp311/2我很難使以下正則表達式模式起作用。對于下面的示例文本字符串,REF1 匹配整行,忽略在行中找到“//[text]”時應匹配的可選REF2 組。目前,正則表達式不承認 //[text] 并將整個文本錯誤地匹配為 REF1。我假設這是貪婪匹配的一個特征.. 但是我在實現非貪婪模式以及前瞻/后視(似乎沒有工作)方面都沒有成功。任何幫助或指導將不勝感激……不確定我遺漏了什么,因為我認為我當前的正則表達式模式應該可以正常工作。如果我能澄清任何事情,請告訴我!謝謝你!^(?P<ID>[A-Z][A-Z0-9]{3})?(?P<REF1>.+)(//(?P<REF2>.+))?(\n?(?P<EXTRA>.+))?$TEX1CNS0P5-AA//CAT-523-VID-00EOS-0XUX PETER LAB RANDOM TEXT DM5.TEX2BFTBSH9999SBRT2LRATRACE201TEX3GWS0P2-AA//D-14839048-99-3THERE WAS 200 COALS IN HIS STOCKING.預期匹配:字符串 1:編號:TEX1參考 1:CNS0P5-AA參考 2:CAT-523-VID-00EOS-0額外:XUX PETER LAB 隨機文本 DM5。字符串 2:編號:TEX2參考 1:BFTBSH9999SBRT2Lref2:(不匹配,因為“//”沒有出現在這個文本中)附加:RA TRACE201字符串 3:編號:TEX3參考 1:GWS0P2-AA參考 2:D-14839048-99-3額外:他的襪子里有 200 塊煤。
3 回答

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
^(?P<ID>[A-Z][A-Z0-9]{3})?(?P<REF1>[^/\n]+)(//(?P<REF2>.+))?(\n?(?P<EXTRA>.+))?$
我已經更新了它。我想它現在通過了所需的案例:
https://regex101.com/r/Yfp311/3
原始實現的問題是REF1
匹配除行終止符之外的所有內容。所以它也匹配//
。

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
怎么樣
^(?P<ID>[A-Z][A-Z0-9]{3})?(?P<REF1>[^/\n]+)(//(?P<REF2>.+))?(\n?(?P<EXTRA>.+))?$
?
我認為在這種情況下手寫解析器更容易實現。

Helenr
TA貢獻1780條經驗 獲得超4個贊
我最終發(fā)現了一個更理想的答案,因為當 REF1 文本包含單個“/”正斜杠時,提供的正則表達式模式會失敗。
^(?P<ID>[A-Z][A-Z0-9]{3})?(?P<REF1>(?:(?!//).)+)(//(?P<REF2>.+))?(\n?(?P<EXTRA>.+))?$
例如 - https://regex101.com/r/Yfp311/4
TEX4POF OF 20/03/09//CAT342134832489 P/O:1600 PARK AVENUE
使用負前瞻正則表達式模式有助于解決這一差距。
添加回答
舉報
0/150
提交
取消