4.2.3 Contenuti del modulo

Il modulo definisce le seguenti funzioni e costanti, e un'eccezione:

compile( pattern[, flags])
Compila un modello di espressione regolare in un oggetto espressione regolare, che pu� venire usato per la corrispondenza, utilizzando i suoi metodi match() e search(), descritti sotto.

Il comportamento dell'espressione pu� venire modificato specificando un valore per il campo flags. I valori possono essere uno delle seguenti variabili, combinate usando l'OR bit per bit (l'operatore |).

La sequenza:

prog = re.compile(pat)
result = prog.match(str)

� equivalente a

result = re.match(pat, str)

ma la versione che utilizza compile() � pi� efficiente quando l'espressione verr� usata pi� di una volta in un singolo programma.

I
IGNORECASE
Effettua una corrispondenza case-insensitive; espressioni come [A-Z] corrisponderanno anche alle lettere minuscole. Non viene influenzato dalla localizzazione corrente.

L
LOCALE
Fa in modo che \w, \W, \b e \B dipendano dalla localizzazione corrente.

M
MULTILINE
Quando specificato, il carattere del modello "^" corrisponde all'inizio della stringa e all'inizio di ogni riga (subito dopo un carattere di fine riga); il carattere del modello "$" corrisponde alla fine della stringa e alla fine di ogni riga (immediatamente prima del carattere di fine riga). In modo predefinito, "^" corrisponde solo all'inizio della stringa e "$" solo alla fine della stringa e subito prima di un fine riga (se presente) alla fine della stringa.

S
DOTALL
Fa in modo che il carattere speciale "." corrisponda ad ogni carattere, incluso il fine riga; senza questa opzione, "." corrisponder� a qualsiasi cosa, eccetto il fine riga.

U
UNICODE
Fa in modo che \w, \W, \b e \B dipendano dal database delle propriet� dei caratteri Unicode. Nuovo nella versione 2.0.

X
VERBOSE
Questa opzione permette di scrivere espressioni regolari che risultino di aspetto pi� piacevole. I caratteri di spaziatura all'interno del modello vengono ignorati, a meno che non siano in una classe di caratteri, o preceduti da un backslash che non faccia parte di un escape (NdT: quindi NON "\\"), e quando una linea contenga un carattere "#" sia in una classe di caratteri sia preceduto da un backslash che non faccia parte di un escape, tutti i caratteri a partire dal carattere "#" pi� a sinistra fino alla fine della stringa vengono ignorati.

search( pattern, string[, flags])
Analizza la string cercando una posizione dove il pattern delll'espressione regolare genera una corrispondenza, e restituisce una corrispondente istanza di MatchObject. Restituisce None se nessuna posizione della stringa corrisponde al modello; notate che questo � diverso dal trovare una corrispondenza di lunghezza zero in qualche punto della stringa.

match( pattern, string[, flags])
Se zero o pi� caratteri all'inizio della string corrispondono al pattern dell'espressione regolare, restituisce una corrispondenze istanza di MatchObject. Restituisce None se la stringa non corrisponde al modello; notate che questo � differente rispetto ad una corrispondenza di lunghezza zero.

Note: Se volete localizzare una corrispondenza ovunque nella string, utilizzate search().

split( pattern, string[, maxsplit = 0])
Divide la string rispetto alle occorrenze del pattern. Se nel pattern sono presenti delle parentesi che indicano dei gruppi, anche il testo di tutti i gruppi nel modello viene restituito come parte della lista risultante. Se maxsplit � un valore diverso da zero, vengono effettuate al pi� maxsplit divisioni, e la rimanenza della stringa viene restituita come elemento finale della lista. (Note di incompatibilit�: nella versione originale di Python 1.5, maxsplit veniva ignorato. Questo comportamento � stato sistemato nelle versioni successive.)

>>> re.split('\W+', 'Parole, parole, parole.')
['Parole', 'parole', 'parole', '']
>>> re.split('(\W+)', 'Parole, parole, parole.')
['Parole', ', ', 'parole', ', ', 'parole', '.', '']
>>> re.split('\W+', 'Parole, parole, parole.', 1)
['Parole', 'parole, parole.']

Questa funzione combina ed estende le funzionalit� delle vecchie regsub.split() e regsub.splitx().

findall( pattern, string)
Restituisce una lista di tutte le corrispondenze (senza sovrapposizioni) del pattern in string. Se uno o pi� gruppi sono presenti nel modello, restituisce una lista di gruppi; questa sar� una lista di tuple se il modello ha pi� di un gruppo. Le corrispondenze vuote vengono incluse nel risultato a meno che non tocchino l'inizio di un'altra corrispondenza. Nuovo nella versione 1.5.2.

finditer( pattern, string)
Restituisce un iteratore sulle corrispondenze (senza sovrapposizioni) del pattern modello dell'espressione regolare sulla stringa. Per ogni corrispondenza, l'iteratore restituisce un oggetto corrispondenza. Le corrispondenze vuote vengono incluse nel risultato, a meno che non tocchino l'inizio di un'altra corrispondenza. Nuovo nella versione 2.2.

sub( pattern, repl, string[, count])
Restituisce la stringa ottenuta sostituento le occorrenze di pattern (senza sovrapposizioni) nella parte pi� a sinistra della string, con le sostituzioni repl. Se il pattern non viene trovato, string viene restituita invariata. repl pu� essere una stringa o una funzione; se � una stringa, tutti i backslash di escape vengono elaborati. Ad esempio, "\n" viene convertito in un singolo carattere di fine riga, "\r" viene convertito in un linefeed, e cos� via. Gli escape sconosciuti, come "\j", vengono lasciati soli. I backreference, come "\6", vengono sostituiti con la sotto stringa corrispondente al gruppo 6 nel modello. Per esempio:

>>> re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
...        r'static PyObject*\npy_\1(void)\n{',
...        'def myfunc():')
'static PyObject*\npy_myfunc(void)\n{'

Se repl � una funzione, viene chiamata per ogni occorrenza (senza sovrapposizioni) del pattern. La funzione prende un singolo oggetto corrispondente come argomento, e restituisce la stringa sostitutiva. Per esempio:

>>> def dashrepl(matchobj):
....    if matchobj.group(0) == '-': return ' '
....    else: return '-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'

Il modello pu� essere una stringa o un oggetto RE; se necessitate di specificare opzioni delle espressioni regolari, dovete usare un oggetto RE o utilizzare i modificatori integrati nel modello; per esempio "sub("(?i)b+", "x", "bbbb BBBB")" returns 'x x'.

L'argomento facoltativo count indica il massimo numero di occorrenze del modello che devono venire sostituite; count deve essere un intero non negativo. Se omesso o zero, tutte le occorrenze verranno sostituite. Le corrispondenze vuote per il modello vengono sostituite solo quando non adiacenti ad una corrispondenza precedente, cos� "sub('x*', '-', 'abc')" restituisce '-a-b-c-'.

In aggiunta ai caratteri di escape e ai backreference come descritti sopra, "\g<name>" utilizzer� la sotto stringa che corrisposta dal gruppo chiamato "name", come definito dalla sintassi (?P<name>...). "\g<number>" utilizza il corrispondente numero del gruppo; "\g<2>" � quindi equivalente a "\2", ma non � ambiguo in una sostituzione come "\g<2>0". "\20" verrebbe interpretato come un riferimento al gruppo 20, non come un riferimento al gruppo 2 seguito dalla costante carattere "0". Il backreference "\g<0>" sostituisce l'intera sotto stringa che corrisponde all'espressione regolare.

subn( pattern, repl, string[, count])
Effettua la stessa operazione di sub(), ma restituisce una tupla (new_string, number_of_subst_made).

escape( string)
Restituisce la string con tutti i caratteri non alfanumerici preceduti da un backslash (NdT: "." diventa "\\."); questo � utile se volete far corrispondere una stringa costante arbitraria che pu� avere metacaratteri delle espressioni regolari al suo interno.

exception error
Eccezione sollevata quando una stringa passata ad una delle funzioni descritte, non � un'espressione regolare valida (per esempio, potrebbe contenere parentesi non bilanciate), o quando si verifica qualche errore durante la compilazione o la corrispondenza. Non � mai un errore se una stringa non contiene corrispondenze per il modello.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.