2016-11-27 1 views
2

Hier ist mein regulärer Ausdruck, wo ich versuche, 3 Capture-Gruppen retriveExtrahieren Zeichenfolge mit Capture-Gruppen (mit re.match)

res = re.match("^(?![()]*)([()])(.*)$", input)

und das ist mein erwartetes Ergebnis

input = "This is a()demo)" 
I would need 3 capture groups 
res.group(1) -> "This is a " 
res.group(2) -> "(" 
res.group(3) -> ")demo)" 

input = "Another demo)(continues...()" 
res.group(1) -> "Another demo " 
res.group(2) -> ")" 
res.group(3) -> "(continues...()" 

input = "(last demo() and finally" 
res.group(1) -> "" 
res.group(2) -> "(" 
res.group(3) -> "last demo() and finally" 

Aber die Regex, die ich geschrieben habe, entspricht keinem der drei oben genannten Eingaben. Was mache ich hier falsch?

+1

@anubhava Dank dafür unter Hinweis darauf, geben wird. Korrigiert – Raj

Antwort

2

Das erste, was Sie falsch gemacht sind versuchen, eine negative vorwärtsgerichtete Behauptung wird mit

(?![()]*) 

Ich vermute, Sie zu sagen „außer() jedes Zeichen“. Sie können das mit den regulären übereinstimmenden Gruppen tun, indem Sie die Gruppe mit einem ^ Symbol starten.

([^()]*) 

Ansonsten ist Ihre Regex ziemlich korrekt.

Hier ist eine regex, dass Sie die erwartete Ausgabe

^([^()]*)([()])(.*)$ 

https://regex101.com/r/SD0L06/1

+1

Eine gute Antwort kommt mit einer Erklärung – qxz

Verwandte Themen