Domanda

I documenti Python dicono:

re.MULTILINE:Quando specificato, il carattere del modello '^' corrisponde all'inizio della stringa e all'inizio di ogni riga (immediatamente dopo ogni fine riga)...Per impostazione predefinita, '^' corrisponde solo all'inizio della stringa...

Allora cosa succede quando ottengo il seguente risultato inaspettato?

>>> 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.'
È stato utile?

Soluzione

Guarda la definizione di re.sub:

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

Il quarto argomento è il conteggio che stai utilizzando re.MULTILINE (che è 8) come conteggio, non come bandiera.

Devi compilare la tua regex se desideri utilizzare i flag.

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

UN flags l'argomento è stato aggiunto in Python 2.7, quindi la definizione completa ora è:

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

Che significa che:

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

lavori.

Altri suggerimenti

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

La definizione completa di re.sub È:

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

Ciò significa che se dici a Python quali sono i parametri, puoi passare flags senza passare count:

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

o, più concisamente:

re.sub('^//', '', s, flags=re.M)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top