Regex101 測(cè)試:https ://regex101.com/r/Yfp311/2我很難使以下正則表達(dá)式模式起作用。對(duì)于下面的示例文本字符串,REF1 匹配整行,忽略在行中找到“//[text]”時(shí)應(yīng)匹配的可選REF2 組。目前,正則表達(dá)式不承認(rèn) //[text] 并將整個(gè)文本錯(cuò)誤地匹配為 REF1。我假設(shè)這是貪婪匹配的一個(gè)特征.. 但是我在實(shí)現(xiàn)非貪婪模式以及前瞻/后視(似乎沒(méi)有工作)方面都沒(méi)有成功。任何幫助或指導(dǎo)將不勝感激……不確定我遺漏了什么,因?yàn)槲艺J(rèn)為我當(dāng)前的正則表達(dá)式模式應(yīng)該可以正常工作。如果我能澄清任何事情,請(qǐng)告訴我!謝謝你!^(?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.預(yù)期匹配:字符串 1:編號(hào):TEX1參考 1:CNS0P5-AA參考 2:CAT-523-VID-00EOS-0額外:XUX PETER LAB 隨機(jī)文本 DM5。字符串 2:編號(hào):TEX2參考 1:BFTBSH9999SBRT2Lref2:(不匹配,因?yàn)椤?/”沒(méi)有出現(xiàn)在這個(gè)文本中)附加:RA TRACE201字符串 3:編號(hào):TEX3參考 1:GWS0P2-AA參考 2:D-14839048-99-3額外:他的襪子里有 200 塊煤。
3 回答

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

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

Helenr
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
我最終發(fā)現(xiàn)了一個(gè)更理想的答案,因?yàn)楫?dāng) REF1 文本包含單個(gè)“/”正斜杠時(shí),提供的正則表達(dá)式模式會(huì)失敗。
^(?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
使用負(fù)前瞻正則表達(dá)式模式有助于解決這一差距。
添加回答
舉報(bào)
0/150
提交
取消