我有这样正则表达式懒惰量词
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)? –