2 votes

extraction d'une chaîne de caractères à l'aide de groupes de capture (avec re.match)

Voici mon expression régulière où j'essaie de retrouver 3 groupes de captures

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

et voici le résultat attendu

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"

Mais la regex que j'ai écrite ne correspond à aucune des 3 entrées que j'ai données ci-dessus. Qu'est-ce que je fais de mal ici ?

2voto

Brendan Abel Points 3745

La première chose que vous faites mal est d'utiliser une assertion négative de lookahead.

(?![()]*)

Je suppose que vous vouliez dire "correspondre à n'importe quel caractère". sauf () ". Vous pouvez faire cela avec les groupes de correspondance régulière en commençant le groupe par un ^ symbole.

([^()]*)

Sinon, votre regex est à peu près correcte.

Voici une regex qui vous donnera le résultat attendu

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X