Ao tentar aprender um pouco mais sobre as expressões regulares, um tutorial sugeriu que você pode usar o \b
para corresponder ao limite de uma palavra. No entanto, o seguinte snippet no interpretador Python não funciona conforme o esperado:
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Deveria ter sido um objeto de correspondência se algo fosse correspondido, mas é None
.
A \b
expressão não é compatível com Python ou estou usando incorretamente?
re.search(r"\btwo\b", x)
r"\btwo\b"
?\b
.r'\b'
para que o caractere seja escapado. (ou então\\b
Respostas:
Por que você não tenta
Resultado:
Também esqueci de mencionar que você deve usar strings brutas em seu código
fonte
%
substituição de string é uma tangente ruim, irrelevante para esta questão em particular.Isso vai funcionar:
re.search(r"\btwo\b", x)
Quando você escreve
"\b"
em Python, é um único caractere:"\x08"
. Ou escape a barra invertida desta forma:ou escreva uma string bruta como esta:
fonte
Apenas para explicar explicitamente por
re.search("\btwo\b", x)
que não funciona, é porque\b
em uma string Python é uma abreviação para um caractere de retrocesso.Portanto, o padrão
"\btwo\b"
está procurando um backspace, seguido portwo
, seguido por outro backspace, que a string que você está procurando em (x = 'one two three'
) não tem.Para permitir
re.search
(oucompile
) interpretar a sequência\b
como um limite de palavra, escape das barras invertidas ("\\btwo\\b"
) ou use uma string bruta para criar seu padrão (r"\btwo\b"
).fonte
Documentação Python
https://docs.python.org/2/library/re.html#regular-expression-syntax
fonte