Gruppi di caratteri nelle espressioni regolari Python
Esistono comandi speciali che
permettono di selezionare interi gruppi
di caratteri in una volta. Il comando \d indica una cifra
da 0 a 9. Il comando \w
indica una cifra, una lettera latina o il carattere
di sottolineatura. Il comando \s indica
uno spazio o un carattere di spaziatura: spazio,
ritorno a capo, tabulazione. È possibile invertire
il significato del comando, scrivendo una lettera maiuscola:
ad esempio, se \d - è una cifra, allora
\D - non è una cifra.
Esempio
Troviamo tutte le cifre:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! !! !!!'
Esempio
Gli operatori di ripetizione considerano i comandi-gruppo
come un unico elemento, quindi le parentesi raggruppanti
non sono necessarie. Nel seguente esempio il modello di ricerca
è il seguente: cifra da 0 a
9 una o più volte:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! abc @@@'
Esempio
Nel seguente esempio il modello di ricerca è
il seguente: qualsiasi cosa una o più volte,
ma non una cifra da 0 a 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'123!3!'
Esempio
In questo esempio il modello di ricerca è il seguente: carattere di spaziatura una volta:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'1!12!123!abc!@@@'
Esempio
In questo esempio il modello di ricerca è
il seguente: NON un carattere di spaziatura una o più
volte. Tutte le sottostringhe, separate da
spazi, saranno sostituite con '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! ! !'
Esempio
In questo esempio il modello di ricerca è
il seguente: cifra o lettera una o più
volte. Tutte le sottostringhe, composte da cifre
e lettere, saranno sostituite con '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! ! @@@'
Esempio
In questo esempio il modello di ricerca è
il seguente: NON una cifra e NON una lettera una o più
volte. In questo caso, rientrano in questa definizione
'@@@' e tutti gli spazi
(anche loro non sono cifre né lettere).
Si noti che alla fine c'è un solo
'!' - in esso è stata trasformata la stringa
' @@@' - con uno spazio davanti:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'1!12!123!Abc!'
Problemi pratici
Data la stringa:
txt = 'a1a a2a a3a a4a a5a aba aca'
Scrivi un'espressione regolare che trovi le stringhe,
in cui ai lati ci sono le lettere 'a',
e tra di esse una cifra.
Data la stringa:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Scrivi un'espressione regolare che trovi le stringhe,
in cui ai lati ci sono le lettere 'a',
e tra di esse un numero qualsiasi di cifre.
Data la stringa:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Scrivi un'espressione regolare che trovi le stringhe,
in cui ai lati ci sono le lettere 'a',
e tra di esse un numero qualsiasi di cifre (incluso
zero cifre, cioè la stringa
'aa').
Data la stringa:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Scrivi un'espressione regolare che trovi le stringhe
del seguente tipo: ai lati ci sono le lettere
'a' e 'b', e tra di loro -
non un numero e non uno spazio.
Data la stringa:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Scrivi un'espressione regolare che trovi le stringhe
del seguente tipo: ai lati ci sono le lettere
'a' e 'b', e tra di loro -
non una lettera, non una cifra e non uno spazio.
Data la stringa:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Scrivi un'espressione regolare che sostituisca tutti
gli spazi con '!'.