sirve regulares regular que python3 para expresiones expresion espacio ejemplos cualquier caracter blanco alfanumerico python regex regex-greedy

regulares - import re python para que sirve



Expresiones regulares no codiciosas de Python (6)

¿Quieres que coincida con "(b)"? Haz lo que han sugerido Zitrax y Paolo. ¿Quieres que coincida con "b"? Hacer

>>> x = "a (b) c (d) e" >>> re.search(r"/((.*?)/)", x).group(1) ''b''

¿Cómo puedo hacer una expresión regular de python como "(. *)" De manera que, dado "py (e) a (b) c (d) e", coincida con "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 manera de decirle a Python "oye, empareja esto lo más pronto posible"?


>>> x = "a (b) c (d) e" >>> re.search(r"/(.*/)", x).group() ''(b) c (d)'' >>> re.search(r"/(.*?/)", x).group() ''(b)''

De acuerdo con los documentos :

El '' * '', '' + '' y '' ? ''los calificadores son todos codiciosos; coinciden con la mayor cantidad de texto posible. Algunas veces este comportamiento no es deseado; si RE <.*> coincide con '' <H1>title</H1> '', coincidirá con toda la cadena, y no solo con '' <H1> ''. Agregar '' ? ''después de que el calificador lo haga realizar el partido de manera no codiciosa o mínima; se emparejarán los pocos caracteres posibles. Usando .*? en la expresión anterior solo coincidirá con '' <H1> ''.


Como los otros han dicho usando el? el modificador en el * cuantificador resolverá tu problema inmediato, pero ten cuidado, estás empezando a deslizarte hacia áreas donde las expresiones regulares dejan de funcionar y necesitas un analizador en su lugar. Por ejemplo, la cadena "(foo (bar)) baz" le causará problemas.


Usar un partido no sangriento es un buen comienzo, pero también sugiero que reconsideres cualquier uso de .* - ¿Qué tal esto?

groups = re.search(r"/([^)]*/)", x)



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