online escape python regex

escape - python regex space



¿Qué significa la "r" en pythons re.compile(r ''banderas de patrón'')? (3)

Como @PauloBu dijo @PauloBu , el prefijo de la cadena r no está específicamente relacionado con las expresiones regulares, sino con las cadenas en general en Python.

Las cadenas normales utilizan el carácter de barra invertida como un carácter de escape para caracteres especiales (como nuevas líneas):

>>> print ''this is /n a test'' this is a test

El prefijo r le dice al intérprete que no haga esto:

>>> print r''this is /n a test'' this is /n a test >>>

Esto es importante en las expresiones regulares, ya que necesita la barra invertida para llegar al módulo intacto, en particular, /b coincide con una cadena vacía específicamente al principio y al final de una palabra. re espera la cadena /b , sin embargo, la interpretación normal de la cadena ''/b'' se convierte al carácter de retroceso ASCII, por lo que debe escapar explícitamente de la barra invertida ( ''//b'' ), o decirle a python que es una cadena sin formato ( r''/b'' ).

>>> import re >>> re.findall(''/b'', ''test'') # the backslash gets consumed by the python string interpreter [] >>> re.findall(''//b'', ''test'') # backslash is explicitly escaped and is passed through to re module ['''', ''''] >>> re.findall(r''/b'', ''test'') # often this syntax is easier ['''', '''']

Estoy leyendo a través de http://docs.python.org/2/library/re.html . De acuerdo con esto, la "r" en pythons re.compile ( r ''pattern flags'') se refiere a la notación de cadena sin formato:

La solución es usar la notación de cadena cruda de Python para patrones de expresión regular; Las barras invertidas no se manejan de ninguna manera especial en una cadena literal con el prefijo ''r''. Así que r "/ n" es una cadena de dos caracteres que contiene ''/' y ''n'', mientras que "/ n" es una cadena de un carácter que contiene una nueva línea. Por lo general, los patrones se expresarán en código Python usando esta notación de cadena sin formato.

¿Sería justo decir entonces que:

re.compile ( r patrón) significa que "patrón" es una expresión regular, mientras que re.compile (patrón) significa que "patrón" es una coincidencia exacta?


No. No todo en la sintaxis de expresiones regulares debe ir precedido por / , entonces . , * , + , etc. todavía tienen un significado especial en un patrón

El r'''' se usa a menudo como una conveniencia para expresiones regulares que necesitan una gran cantidad de / ya que evita el desorden de duplicar la /


No, ya que la documentación pegada explica el prefijo r a una cadena indica que la cadena es una raw string .

Debido a las colisiones entre los caracteres de escape de Python y los de expresión regular, ambos de los cuales usan el carácter de barra diagonal / , las cadenas en bruto proporcionan una manera de indicar a Python que desea una cadena sin escaparse.

Examina lo siguiente:

>>> "/n" ''/n'' >>> r"/n" ''//n'' >>> print "/n" >>> print r"/n" /n

El prefijo con una r simplemente indica a la cadena que las barras diagonales / deben tratarse literalmente y no como caracteres de escape para python.

Esto es útil cuando, por ejemplo, está buscando un límite de palabras. La expresión regular para esto es /b , sin embargo, para capturar esto en una cadena de Python, necesitaría usar "//b" como patrón. En su lugar, puedo usar la cadena sin formato: r"/b" para hacer coincidir el patrón.

Esto resulta especialmente útil cuando se trata de encontrar una barra invertida literal en expresiones regulares. Para hacer coincidir una barra invertida en expresiones regulares, necesito usar el patrón // , para escapar de esto en python significa que necesito escapar de cada barra diagonal y el patrón se convierte en "////" , o el mucho más simple r"//" .

Como puede adivinar en expresiones regulares más largas y complejas, las barras adicionales pueden ser confusas, por lo que las cadenas en bruto generalmente se consideran el camino a seguir.