我有這樣正則表達式懶惰量詞
a something* q b c w
一個句子,我必須匹配一個和q在一起,就像
(id_1: a, id_2: q)
b單獨像
(id_1: b)
和ç和瓦特在一起,就像 (ID_1:C ID_2:W)。
我試圖用因爲懶惰操作的這個正則表達式
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)?\b)
*?正則表達式只有一句話的第一部分相匹配,僅匹配
(id_1: a, id_1: b, id_1: c)
如果我們用一個貪婪的運營商,從而表達變得
(?:\b(?P<id_1>a|b|c)\b(?:.*)(?P<id_2>q|w)?\b)
它匹配
(id_1: a)
之後的一切都匹配爲。*。
如果第二部分是強制性的(與懶*):
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)\b)
它匹配這樣的句子
(id_1: a, id_2: q);(id_1: b, id_2: w)
預期。
可以使用正則表達式「優先」匹配整個句子(包括可選部分),或者只匹配第一部分只有(如果缺少可選部分)。
編輯: 對不起,提供的正則表達式有一些錯誤。
最後的正則表達式是:
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)\b)
,它需要兩個組是強制性的。它匹配「某事* W」,但不匹配「某事*」或「一個」。我需要匹配「一個東西* W」以及「a」和「仙」,並分別獲得匹配組:
(id_1: a , id_2: w) ; (id_1: a, id_2: none) ; (id_1:a , id_2: w)
我認爲需要的正則表達式是:
(?:\b(?P<id_1>a|b|c)\b(?:.*?)(?P<id_2>q|w)?\b)
但在句子「a something * w」中,它只匹配「a」(由於*上的惰性運算符)。
我也更新了所有的實例。
是不是你最後的正則表達式匹配字符串你需要的方式?我刪除了'b c w'並且有一場比賽。你能用1個例子來描述你需要匹配什麼,哪個正則表達式最接近,缺少什麼? –
嗨@stribizhev,謝謝你的幫助。我編輯了這個問題,因爲表達式中有一些錯誤。我還在編輯部分提供了一個例子。 – Desh901
Like ['\ b(?P a | b | c)\ b(?:(?!\ b(?:q | w)\ b)。)*(?P q | w |)\ b '](https://regex101.com/r/vU4wZ0/4)?或者也許,[?\ b(?P a | b | c)\ b(?:(?!\ b(?:q | w)\ b)。)*(?P q | w) B'](https://regex101.com/r/iP2pZ5/1)? –