⊗pyPmREGL 38 of 129 menu

Limitarea lăcomiei în expresiile regulate în Python

Expresiile regulate sunt implicit lăcomace. Aceasta înseamnă că ele capturează numărul maxim posibil de caractere. Să analizăm un exemplu. Să presupunem că avem următorul șir:

txt = 'aeeex zzz x kkk'

În acest șir vrem să găsim subșirul 'aeeex' după următorul model: litera 'a', apoi orice caracter unul sau de mai multe ori, apoi litera 'x':

res = re.sub('a.+x', '!', txt) print(res)

Deși trebuie să obținem șirul '! zzz x kkk', va fi afișat șirul '! kkk'. Totul se datorează faptului că expresia noastră regulată caută toate caracterele de la litera 'a' până la litera 'x'. Dar în șirul nostru sunt două litere 'x'! Din cauza lăcomiei, se întâmplă că expresia regulată caută până la ultimul x, capturând astfel nu ceea ce ne trebuia necesar.

Desigur, de multe ori acest comportament este chiar ceea ce ne dorim. Dar în acest caz particular trebuie să anulăm lăcomia și să-i spunem expresiei regulate, să caute până la primul x. În acest caz, ar trebui să punem un semn de întrebare după operatorul de repetare:

res = re.sub('a.+?x', '!', txt) print(res) # va afișa șirul '! zzz x kkk'

Lăcomia poate fi limitată pentru toți operatorii de repetare: și *, și ?, și {} - astfel: *?, ?? și {}?.

Este dat șirul:

txt = 'aba accca azzza wwwwa'

Scrieți o expresie regulată care va găsi toate șirurile la ale căror margini sunt literele 'a', și le va înlocui pe fiecare cu '!'. Între literele 'a' poate fi orice caracter (cu excepția 'a').

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge