Set di caratteri nelle espressioni regolari Python
I gruppi di caratteri \d e \w non
sono molto flessibili. Anche un compito semplice come
trovare tutte le lettere, ma non i numeri -
non può essere risolto da loro. Per tali compiti
si dovrebbero usare le parentesi quadre,
che rappresentano l'operazione 'o'.
Le parentesi quadre sostituiscono un
carattere, qualsiasi di quelli elencati all'interno. Ad
esempio, così: x[abc]x -
stiamo dicendo che ai bordi devono esserci lettere
x, e all'interno - un carattere: o 'a',
o 'b', o 'c'.
Dopo le parentesi quadre si possono scrivere
operatori di ripetizione. Ad esempio, così:
x[abc]+x - stiamo dicendo che all'interno
degli x può esserci qualsiasi quantità di caratteri
'a', 'b' e 'c' - in
qualsiasi combinazione.
Si possono non solo elencare caratteri, ma
creare gruppi di caratteri, scrivendo tra
due caratteri un trattino. Ad esempio, così:
[a-d] - otteniamo tutti i caratteri da
'a' a 'd'.
Vediamo degli esempi.
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi lettera da
'a' a 'z':
Risultato dell'esecuzione del codice:
'! ! ! x@x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi lettera da
'a' a 'k':
txt = 'xax xbx xmx x@x'
res = re.sub('x[a-k]x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! xmx x@x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi lettera da
'A' a 'Z':
txt = 'xax xBx xcx x@x'
res = re.sub('x[A-Z]x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'xax ! xcx x@x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi cifra da 0
a 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[0-9]x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'xax ! ! ! x@x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi cifra da 3
a 7:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[3-7]x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'xax x1x ! ! x@x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi lettera da
'a' a 'z' o cifra da
1 a 9:
txt = 'xax x1x x3x x5x x@x'
res = re.sub('x[a-z1-9]x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! ! x@x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi lettera da
'a' a 'z' o lettera da
'A' a 'Z':
txt = 'xax xBx xcx x5x x@x'
res = re.sub('x[a-zA-Z]x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! x5x x@x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x qualsiasi lettera da
'a' a 'z' o le cifre 1,
2:
txt = 'xax xbx x1x x2x x3x'
res = re.sub('x[a-z12]x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! ! x3x'
Esempio
In questo esempio il modello di ricerca è
così: tra le x lettere da 'a'
a 'z' in quantità da 1 e
oltre:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]+x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'xx ! ! ! x123x xa3x'
Esempio
Facciamo in modo che la quantità di lettere possa essere anche zero:
txt = 'xx xabesx xaadx x123x xa3x'
res = re.sub('x[a-z]*x', '!', txt)
print(res)
Come risultato otterremo:
'! ! ! ! x123x xa3x'
Esempio
All'interno delle parentesi quadre si possono anche indicare caratteri escapati. Troviamo una sequenza di lettere e cifre, ripetuta zero o più volte:
txt = 'xx x@x xadx xas12x xa3x'
res = re.sub('x[a-z\d]*x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! x@x ! ! !'
Esempio
Se abbiamo bisogno di indicare altre parentesi quadre, allora anche queste devono essere escapate:
txt = 'xx xrx xas[]x x3x'
res = re.sub('x[a-z\[\]]*x', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! x3x'
Problemi pratici
Data la stringa:
txt = 'aba aea aca aza axa'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - la lettera 'b',
'e' o 'x'.
Data la stringa:
txt = 'a1a a3a a7a a9a aba'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - una cifra da
3 a 6.
Data la stringa:
txt = 'aba aea afa aha aga'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - una lettera da
'a' a 'g'.
Data la stringa:
txt = 'aba aea afa aha aga'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - una lettera da
'a' a 'f' e da 'j'
a 'z'.
Data la stringa:
txt = 'aAa aea aEa aJa a3a'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - una lettera da
'a' a 'f' e da 'A'
a 'D'.
Data la stringa:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - lettere latine
minuscole, senza toccare le altre.
Data la stringa:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - lettere latine minuscole e
maiuscole, senza toccare le altre.
Data la stringa:
txt = 'aAXa aeffa aGha aza ax23a a3sSa'
Scrivi un'espressione regolare che trovi secondo
il seguente modello: ai bordi ci sono le lettere
'a', e tra di loro - lettere latine
minuscole e cifre, senza toccare le altre.