Pergunta

Os documentos do Python dizem:

re.MULTILINE:Quando especificado, o caractere padrão '^' corresponde ao início da string e ao início de cada linha (imediatamente após cada nova linha)...Por padrão, '^' corresponde apenas ao início da string...

Então, o que acontece quando obtenho o seguinte resultado inesperado?

>>> import re
>>> s = """// The quick brown fox.
... // Jumped over the lazy dog."""
>>> re.sub('^//', '', s, re.MULTILINE)
' The quick brown fox.\n// Jumped over the lazy dog.'
Foi útil?

Solução

Veja a definição de re.sub:

sub(pattern, repl, string[, count])

O quarto argumento é a contagem, você está usando re.MULTILINE (que é 8) como contagem, não como bandeira.

Você deve compilar seu regex se desejar usar sinalizadores.

re.sub(re.compile('^//', re.MULTILINE), '', s)

A flags argumento foi adicionado no Python 2.7, então a definição completa agora é:

re.sub(pattern, repl, string[, count, flags])

O que significa que:

re.sub('^//', '', s, flags=re.MULTILINE)

funciona.

Outras dicas

re.sub('(?m)^//', '', s)

A definição completa de re.sub é:

re.sub(pattern, repl, string[, count, flags])

O que significa que se você disser ao Python quais são os parâmetros, poderá passar flags sem passar count:

re.sub('^//', '', s, flags=re.MULTILINE)

ou, mais concisamente:

re.sub('^//', '', s, flags=re.M)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top