expresiones regulares no codiciosas de Python

Resuelto So8res asked hace 15 años • 7 respuestas

¿Cómo hago una expresión regular de Python como "(.*)"tal, dadas "a (b) c (d) e"las coincidencias de Python "b"en lugar de "b) c (d"?

Sé que puedo usar "[^)]"en lugar de ".", pero estoy buscando una solución más general que mantenga mi expresión regular un poco más limpia. ¿Hay alguna forma de decirle a Python "oye, combina esto lo antes posible"?

So8res avatar Apr 20 '09 06:04 So8res
Aceptado

Buscas al todopoderoso*?

De los documentos, codiciosos versus no codiciosos

los calificadores no codiciosos *?, +?, ??, o {m,n}?[...] coinciden con la menor cantidad de texto posible.

Trey Stout avatar Apr 19 '2009 23:04 Trey Stout
>>> x = "a (b) c (d) e"
>>> re.search(r"\(.*\)", x).group()
'(b) c (d)'
>>> re.search(r"\(.*?\)", x).group()
'(b)'

Según los documentos :

Los calificadores ' *', ' +' y ' ?' son todos codiciosos; coinciden con la mayor cantidad de texto posible. A veces este comportamiento no es deseado; si el RE <.*>coincide con " <H1>title</H1>", coincidirá con toda la cadena, y no solo con " <H1>". Agregar ' ?' después del calificador hace que realice el partido de manera mínima o no codiciosa; Se combinarán la menor cantidad de caracteres posible. El uso .*?en la expresión anterior coincidirá solo con ' <H1>'.

Paolo Bergantino avatar Apr 19 '2009 23:04 Paolo Bergantino

¿ No \\(.*?\\)funcionaría? Esa es la sintaxis no codiciosa.

Zitrax avatar Apr 19 '2009 23:04 Zitrax