⊗pyPmREGL 38 of 129 menu

Omejitev požrešnosti v regularnih izrazih v Pythonu

Regularni izrazi so privzeto požrešni. To pomeni, da zajamejo čim večje možno število znakov. Poglejmo si primer. Recimo, da imamo naslednjo niz:

txt = 'aeeex zzz x kkk'

V tem nizu želimo najti podniz 'aeeex' z naslednjim vzorcem: črka 'a', nato kateri koli znak enkrat ali večkrat, nato črka 'x':

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

Čeprav pričakujemo niz '! zzz x kkk', bo izpisal niz '! kkk'. Razlog je v tem, da naš regularni izraz išče vse znake od črke 'a' do črke 'x'. Toda v našem nizu sta dve črki 'x'! Zaradi požrešnosti se izkaže, da regularni izraz išče do zadnjega 'x', s čimer zajame nekaj, kar nismo želeli.

Seveda je takšno vedenje pogosto zaželeno. Toda ravno v tem primeru moramo prekiniti požrešnost in reči regularnemu izrazu, da naj išče do prvega 'x'. V tem primeru moramo za operatorjem ponavljanja dodati vprašaj:

res = re.sub('a.+?x', '!', txt) print(res) # izpiše niz '! zzz x kkk'

Požrešnost lahko omejimo vsem operatorjem ponavljanja: tako *, kot ?, in {} - takole: *?, ?? in {}?.

Dan je niz:

txt = 'aba accca azzza wwwwa'

Napišite regularni izraz, ki bo našel vse nize, na katerih so na robu črke 'a', in jih zamenjal z '!'. Med črkama 'a' je lahko kateri koli znak (razen 'a').

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni