next up previous contents
Next: Ripetizioni Up: Espressioni regolari Previous: Introduzione alle Espressioni Regolari   Indice

I metacaratteri

Intervalli come quello sopra possono essere specificati tramite particolari sequenze che corrispondono a classi di caratteri, eccone alcune:

$\backslash$d
corrisponde a una qualsiasi cifra decimale; è equivalente a [0-9].
$\backslash$D
corrisponde a un qualsiasi carattere che non sia una cifra; è equivalente a [$^\wedge$0-9].
$\backslash$s
corrisponde a uno spazio bianco; è equivalente a [ $\backslash$t$\backslash$n$\backslash$r$\backslash$f$\backslash$v]. (Lo spazio bianco in testa è necessario! $\backslash$t corrisponde a uno stop di tabulazione, $\backslash$n a un `newline' ecc.).
$\backslash$S
corrisponde a un qualsiasi carattere che non sia uno spazio bianco; è equivalente a [$^\wedge$ $\backslash$t$\backslash$n$\backslash$r$\backslash$f$\backslash$v].
$\backslash$w
corrisponde a un qualsiasi carattere alfanumerico; equivale a: [a-zA-Z0-9_].
$\backslash$W
corrisponde a un qualsiasi carattere non alfanumerico; equivale a: [$^\wedge$a-zA-Z0-9_].
(Per una completa trattazione dobbiamo rivolgerci alla Library Reference e il Regular Expression HOWTO).

Oltre che a segnalare tali sequenze, `$\backslash$' svolge la funzione di proteggere (il noto `escape') caratteri speciali quali a es.`*', facendo sì che vengano interpretati come caratteri normali.

Purtroppo questo può essere fonte di problemi, in quanto `$\backslash$$\backslash$' è utilizzato in Python quale carattere di escape nelle stringhe letterali.

Se per esempio vogliamo trovare una RE che corrisponda alla stringa '$\backslash$index' che s'incontra in file sorgenti .tex . È necessario proteggere la barra obliqua inversa con una seconda barra, quindi si ottiene '$\backslash$$\backslash$index', che rappresenta la stringa che dev'essere passata a compile(). Per esprimerla come stringa letterale tocca però proteggere nuovamente le barre oblique inverse, per cui si ottiene un folle '$\backslash$$\backslash$$\backslash$$\backslash$index'. Quindi per esprimere un `$\backslash$$\backslash$' letterale ne occorrono ben quattro. ("Letterale" in Python è un elemento di programma, una notazione per valori costanti di alcuni tipi built-in. Può essere un numero o una stringa, visto che i caratteri sono stringhe di lunghezza unitaria).

Per evitare tale moltiplicazione delle barre oblique inverse, nei pattern complessi si può utilizzare la notazione raw per le stringhe. Prefissando a una stringa letterale una r si otterrà che i caratteri speciali non vengano gestiti in modi particolari. A esempio la nostra
index sarà scritta come stringa raw r' $\backslash\backslash$index'

Altri metacaratteri importanti sono

$\mid$
è di fatto l'or alternativo. Se A e B sono RE allora anche A$\mid$B avrà un match con ogni stringa che contenga 'A' oppure 'B'. $\mid$ ha una priorità molto bassa, e serve per avere stringhe alternate con più caratteri. Per esempio 'taa$\mid$tga' troverà match con 'taa' e 'tga' ma non con 'ta', 'aa', 'tg'.
.
corrisponde a un qualsiasi carattere eccetto un newline. Affinché corrisponda anche a un newline bisogna abilitare l'opzione DOTALL.
$^\wedge$
(`caret') corrisponde all'inizio della stringa, nel modo MULTILINE significa anche 'subito dopo un newline'. Inoltre serve per specificare un intervallo di caratteri tramite 'complemento', come riportato sopra.
$
corrisponde alla fine della stringa, nel modo MULTILINE significa anche 'subito prima di un newline'; 'dna' corrisponde sia a 'dna' che a 'dna reversed', 'dna2' ecc. mentre 'dna$' corrisponde solo a 'dna'.


next up previous contents
Next: Ripetizioni Up: Espressioni regolari Previous: Introduzione alle Espressioni Regolari   Indice
2004-11-02