expresiones regulares no codiciosas de Python
¿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"?
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.
>>> 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>
'.
¿ No \\(.*?\\)
funcionaría? Esa es la sintaxis no codiciosa.