Mientras intentaba aprender un poco más sobre las expresiones regulares, un tutorial sugirió que puede usar el \b
para hacer coincidir el límite de una palabra. Sin embargo, el siguiente fragmento del intérprete de Python no funciona como se esperaba:
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Debería haber sido un objeto de coincidencia si algo coincidía, pero lo es None
.
¿La \b
expresión no es compatible con Python o la estoy usando mal?
re.search(r"\btwo\b", x)
r"\btwo\b"
?\b
.r'\b'
para que el personaje se escape. (o de lo contrario, doble escape\\b
, que es asqueroso)Respuestas:
¿Por qué no lo intentas?
Salida:
También se olvidó de mencionar que debería usar cadenas sin procesar en su código
fuente
%
sustitución de cuerdas es una mala tangente, irrelevante para esta pregunta en particular.Esto funcionará:
re.search(r"\btwo\b", x)
Cuando se escribe
"\b"
en Python, es un solo carácter:"\x08"
. O escapar de la barra invertida de esta manera:o escribe una cadena sin formato como esta:
fuente
Solo para explicar explícitamente por qué
re.search("\btwo\b", x)
no funciona, es porque\b
en una cadena de Python es una abreviatura de un carácter de retroceso.Entonces, el patrón
"\btwo\b"
busca un retroceso, seguido detwo
otro retroceso, que la cadena que está buscando en (x = 'one two three'
) no tiene.Para permitir
re.search
(ocompile
) interpretar la secuencia\b
como un límite de palabra, escape las barras diagonales inversas ("\\btwo\\b"
) o use una cadena sin formato para crear su patrón (r"\btwo\b"
).fuente
Documentación de Python
https://docs.python.org/2/library/re.html#regular-expression-syntax
fuente