⊗pyPmREGL 38 of 129 menu

Regularās izteiksmes mantkārības ierobežošana Python

Regularās izteiksmes pēc noklusējuma ir mantkārīgas. Tas nozīmē, ka tās satver maksimāli iespējamo simbolu daudzumu. Analizēsim to ar piemēru. Pieņemsim, ka mums ir šāda virkne:

txt = 'aeeex zzz x kkk'

Šajā virknē vēlamies atrast apakšvirkni 'aeeex' pēc šāda parauga: burts 'a', pēc tam jebkura rakstzīme vienu vai vairāk reizes, pēc tam burts 'x':

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

Lai arī mums vajadzētu iegūt virkni '! zzz x kkk', tiks izdrukāta virkne '! kkk'. Visa būtība ir tajā, ka mūsu regularā izteiksme meklē visas rakstzīmes no burta 'a' līdz burtam 'x'. Bet mūsu virknē ir divi burti 'x'! Mantkārības dēļ izrādās, ka regularā izteiksme meklē līdz pat pēdējā x, tādējādi satverot ne to, kas mums bija vajadzīgs.

Protams, bieži vien tieši šāda uzvedība mums ir vajadzīga. Bet konkrēti šajā gadījumā ir nepieciešams atslēgt mantkārību un likt regularajai izteiksmei, lai tā meklē līdz pirmajam x. Šajā gadījumā atkārtošanās operatoram vajadzētu pievienot jautājuma zīmi:

res = re.sub('a.+?x', '!', txt) print(res) # izvadīs virkni '! zzz x kkk'

Mantkārību var ierobežot visiem atkārtošanās operatoriem: gan *, gan ?, un {} - šādi: *?, ?? un {}?.

Dota virkne:

txt = 'aba accca azzza wwwwa'

Uzrakstiet regularu izteiksmi, kas atradīs visas virknes, kuru malās atrodas burti 'a', un aizstās katru no tām ar '!'. Starp burtiem 'a' var būt jebkura rakstzīme (izņemot 'a').

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt