Grupuri de caractere în expresiile regulate Python
Există comenzi speciale care
permit selectarea întregilor grupuri
de caractere deodată. Comanda \d înseamnă cifră
de la 0 la 9. Comanda \w
desemnează o cifră, o literă latină sau semnul
de subliniere. Comanda \s desemnează
un spațiu sau un caracter de spațiere: spațiu,
sfârșit de linie, tabulație. Se poate inversa
semnificația comenzii, scriind litera mare:
de exemplu, dacă \d este o cifră, atunci
\D înseamnă non-cifră.
Exemplu
Să găsim toate cifrele:
txt = '1 12 123'
res = re.sub('\d', '!', txt)
print(res)
Rezultatul executării codului:
'! !! !!!'
Exemplu
Operatorii de repetare consideră comenzile-grup
ca un întreg, adică parantezele de grupare
nu sunt necesare. În următorul exemplu, șablonul de căutare
arată astfel: cifră de la 0 la
9 de una sau mai multe ori:
txt = '1 12 123 abc @@@'
res = re.sub('\d+', '!', txt)
print(res)
Rezultatul executării codului:
'! ! ! abc @@@'
Exemplu
În următorul exemplu, șablonul de căutare arată
astfel: orice de una sau mai multe ori,
dar nu cifră de la 0 la 9:
txt = '123abc3@@'
res = re.sub('\D+', '!', txt)
print(res)
Rezultatul executării codului:
'123!3!'
Exemplu
În acest exemplu, șablonul de căutare arată astfel: caracter de spațiere o singură dată:
txt = '1 12 123 abc @@@'
res = re.sub('\s', '!', txt)
print(res)
Rezultatul executării codului:
'1!12!123!abc!@@@'
Exemplu
În acest exemplu, șablonul de căutare arată
astfel: caracter NON-spațiere de una sau mai multe
ori. Toate subșirurile, separate prin
spații, vor fi înlocuite cu '!':
txt = '1 12 123 abc @@@'
res = re.sub('\S+', '!', txt)
print(res)
Rezultatul executării codului:
'! ! ! ! !'
Exemplu
În acest exemplu, șablonul de căutare arată
astfel: cifră sau literă de una sau mai multe
ori. Toate subșirurile, formate din cifre
și litere, vor fi înlocuite cu '!':
txt = '1 12 123a Abc @@@'
res = re.sub('\w+', '!', txt)
print(res)
Rezultatul executării codului:
'! ! ! ! @@@'
Exemplu
În acest exemplu, șablonul de căutare arată
astfel: NON-cifră și NON-literă de una sau mai multe
ori. În cazul nostru, această definiție
se potrivește pentru '@@@' și toate spațiile
(ele de asemenea nu sunt cifre și nici litere).
Atenție la faptul că la final este un singur
'!' - în el a fost transformat șirul
' @@@' - cu spațiu în față:
txt = '1 12 123 Abc @@@'
res = re.sub('\W+', '!', txt)
print(res)
Rezultatul executării codului:
'1!12!123!Abc!'
Probleme practice
Este dat șirul:
txt = 'a1a a2a a3a a4a a5a aba aca'
Scrieți o expresie regulată care va găsi șirurile,
în care la margini sunt literele 'a',
iar între ele o singură cifră.
Este dat șirul:
txt = 'a1a a22a a333a a4444a a55555a aba aca'
Scrieți o expresie regulată care va găsi șirurile,
în care la margini sunt literele 'a',
iar între ele orice număr de cifre.
Este dat șirul:
txt = 'aa a1a a22a a333a a4444a a55555a aba aca'
Scrieți o expresie regulată care va găsi șirurile,
în care la margini sunt literele 'a',
iar între ele orice număr de cifre (inclusiv
zero cifre, adică șirul
'aa').
Este dat șirul:
txt = 'avb a1b a2b a3b a4b a5b abb acb'
Scrieți o expresie regulată care va găsi șiruri
de următorul tip: la margini sunt literele
'a' și 'b', iar între ele -
nu cifră și nu spațiu.
Este dat șirul:
txt = 'ave a#b a2b a$b a4b a5b a-b acb'
Scrieți o expresie regulată care va găsi șiruri
de următorul tip: la margini sunt literele
'a' și 'b', iar între ele -
nu literă, nu cifră și nu spațiu.
Este dat șirul:
txt = 'ave a#a a2a a$a a4a a5a a-a aca'
Scrieți o expresie regulată care va înlocui toate
spațiile cu '!'.