⊗pyPmREGL 38 of 129 menu

Obmedzenie chamivosti v regulárnych výrazoch v Pythone

Regulárne výrazy sú predvolene chamtivé. To znamená, že zachytávajú čo najväčší možný počet znakov. Poďme si to rozobrať na príklade. Nech máme takýto reťazec:

txt = 'aeeex zzz x kkk'

V tomto reťazci chceme nájsť podreťazec 'aeeex' podľa nasledujúceho vzoru: písmeno 'a', potom ľubovoľný znak jeden alebo viackrát, potom písmeno 'x':

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

Hoci chceme získať reťazec '! zzz x kkk', vypíše sa reťazec '! kkk'. Celé je to o tom, že náš regulárny výraz hľadá všetky znaky od písmena 'a' po písmeno 'x'. Ale v našom reťazci sú dve písmená 'x'! Kvôli chamivosti sa stáva, že regulárny výraz hľadá až po úplne posledné x, čím zachytáva nie to, čo sme potrebovali.

Samozrejme, často je toto správanie práve to, čo potrebujeme. Ale konkrétne v tomto prípade je potrebné zrušiť chamivosť a povedať regulárnemu výrazu, aby hľadal len po prvé x. V tomto prípade by sme mali za operátorom opakovania umiestniť otáznik:

res = re.sub('a.+?x', '!', txt) print(res) # vypíše reťazec '! zzz x kkk'

Chamivosť možno obmedziť všetkým operátorom opakovania: aj *, aj ?, a {} - takto: *?, ?? a {}?.

Daný reťazec:

txt = 'aba accca azzza wwwwa'

Napíšte regulárny výraz, ktorý nájde všetky reťazce, na okrajoch ktorých sú písmená 'a', a nahradí každý z nich '!'. Medzi písmenami 'a' môže byť ľubovoľný znok (okrem '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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť