⊗pyPmREGL 38 of 129 menu

Абмежаванне пражэрнасці ў рэгулярках у Python

Рэгулярныя выразы па змаўчанні пражэрныя. Гэта значыць, што яны захопліваюць максімальна магчымая колькасць сімвалаў. Давайце разбярэм на прыкладзе. Хай у нас ёсць вось такая радок:

txt = 'aeeex zzz x kkk'

У гэтым радку хочам знайсці падрадок 'aeeex' па наступным шаблоне: літара 'a', затым любы сімвал адзін ці больш разоў, затым літара 'x':

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

Хоць нам трэба атрымаць радок '! zzz x kkk', выведзецца радок '! kkk'. Уся справа ў тым, што наша рэгулярка шукае ўсе сімвалы ад літары 'a' да літары 'x'. Але ў нашай радку дзве літары 'x'! З-за пражэрнасці атрымліваецца, што рэгулярка шукае да самага апошняга ікса, тым самым захопліваючы не тое, што нам было патрэбна.

Вядома, часта такая паводзіны нам і патрабуецца. Але канкрэтна ў гэтым выпадку трэба адмяніць пражэрнасць і сказаць рэгулярцы, каб яна шукала да першага ікса. У гэтым выпадку варта пасля аператара паўтарэння паставіць знак пытання:

res = re.sub('a.+?x', '!', txt) print(res) # выведзе радок '! zzz x kkk'

Пражэрнасць можна абмяжоўваць усім аператарам паўтарэння: і *, і ?, і {} - вось так: *?, ?? і {}?.

Дадзены радок:

txt = 'aba accca azzza wwwwa'

Напішыце рэгулярку, якая знойдзе ўсе радкі па краях якіх стаяць літары 'a', і замяніць кожную з іх на '!'. Паміж літарамі 'a' можа быць любы сімвал (акрамя 'a').

Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць