Operatori de repetare a caracterelor în expresii regulate
Există situații când trebuie să specifici că un
caracter se repetă de un anumit număr de
ori. Dacă numărul exact de repetări este necunoscut,
atunci poți să-l scrii de mai multe ori
- 'aaaa'. Dar ce să faci dacă trebuie
să spui așa ceva: repetă de una sau mai multe
ori?
Pentru asta există operatori (cuantificatori)
de repetare: plus + (una sau mai multe
ori), steluță * (zero sau mai multe
ori) și semnul întrebării ? (zero sau o dată).
Acești operatori acționează asupra caracterului
care se află înaintea lor.
Să analizăm funcționarea acestor operatori cu exemple.
Exemplul
Să găsim toate subșirurile după șablonul litera
'x', litera 'a' una sau mai multe
ori, litera 'x':
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa+x', '!', txt)
print(res)
Rezultatul executării codului:
'xx ! ! ! xbx'
Exemplul
Să găsim toate subșirurile după șablonul litera
'x', litera 'a' zero sau mai multe
ori, litera 'x':
txt = 'xx xax xaax xaaax xbx'
res = re.sub('xa*x', '!', txt)
print(res)
Rezultatul executării codului:
'! ! ! ! xbx'
Exemplul
Să găsim toate subșirurile după șablonul litera
'x', litera 'a' zero sau o dată,
litera 'x':
txt = 'xx xax xaax xbx'
res = re.sub('xa?x', '!', txt)
print(res)
Rezultatul executării codului:
'! ! xaax xbx'
Probleme practice
Este dat șirul:
txt = 'aa aba abba abbba abca abea'
Scrieți o expresie regulată care va găsi șirurile
'aba', 'abba', 'abbba'
după șablonul: litera 'a', litera
'b' de oricâte ori, litera
'a'.
Este dat șirul:
txt = 'aa aba abba abbba abca abea'
Scrieți o expresie regulată care va găsi șirurile
'aa', 'aba', 'abba',
'abbba' după șablonul: litera
'a', litera 'b' de oricâte ori
(inclusiv de zero ori), litera
'a'.
Este dat șirul:
txt = 'aa aba abba abbba abca abea'
Scrieți o expresie regulată care va găsi șirurile
'aa', 'aba' după șablonul:
litera 'a', litera 'b' o dată
sau de zero ori, litera 'a'.
Este dat șirul:
txt = 'aa aba abba abbba abca abea'
Scrieți o expresie regulată care va găsi șirurile
'aa', 'aba', 'abba',
'abbba', fără a captura 'abca'
și 'abea'.