2016-03-22 17 views
1

kombine: Ben adıyla gruplarını almak için ?P<name> kongre (detaylar here) ile Python Lookahead tekniğini kullanmak istiyorum.= ve P kısacası bir regex

fazla ayrıntı: Ben Lookahead hile here keşfetti

; Örneğin. Aşağıdaki regex ...

/^(?=.*Tim)(?=.*stupid).+ 

... "Tim stupid" veya "stupid Tim" gibi dizeleri algılamasını sağlayan, sipariş değil önemli olan.

?= "işlecini" ?P one ile nasıl birleştirebileceğimi anlayamıyorum; Aşağıdaki regex açıkçası hile yapmak ama ne istiyorum bir fikir verir vermez:

/^(?=?P<word1>.*Tim)(?=?P<word2>.*stupid).+ 
+1

Bunu mu demek istediniz: ['^ (? = (? P . * Tim)) (? = (? P . * Aptal)) +'] (https://regex101.com/r/wW3bR3/ 1)? –

+1

@suizokukan: A * yakalama * grubu bir '(...)' dir. '(? = ...)' * lookaheads * 'dir. –

cevap

1

senin regex ?P<word1> bir named capture group hatırlatıyor:

adlandırılmış grubu için sözdizimi Python'a özgü uzantılardan biridir: (?P<name>...). *name*, açıkça, grubun adıdır. Adlandırılmış gruplar, tam olarak yakalama grupları gibi davranır ve ayrıca bir adı bir grupla ilişkilendirir.

:

Yani, büyük olasılıkla sen lookaheads hem desenleri karşılayacak bir dize olması gerekir ve hem içeride alt dizeleri yakalamak için yakalama için bir yol başında demirlemiş olumlu lookahead içine alt dizeleri arıyoruz

^(?=(?P<word1>.*Tim))(?=(?P<word2>.*stupid)).+ 
    ^^^^^^^^^^ ^ ^^^^^^^^^^  ^
sen dize kendisi gerekmiyorsa, .+ gereksiz ve kaldırılamaz ki regex demo

not bakınız. Gerekirse, adlandırılmış yakalama gruplarının kenarlıklarını yeniden ayarlamak isteyebilirsiniz.

+1

Herkese teşekkürler: açıklamalarınız çok açık. – suizokukan

+0

Daha doğru (?): '^ (? =. * (? P Tim)) (? =. * (? P aptal)) +' – suizokukan