⊗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'! Поради алчноста, регуларниот израз бара до последната буква 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šuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј