⊗pyPmRELAB 72 of 129 menu

Позитивни и негативни преглед у регуларним изразима Пајтона

Понекад је потребно решити задатак овог типа: пронаћи стринг 'aaa' и заменити га са '!', али само ако после 'aaa' стоји 'x', а сам 'x' при томе не мењати. Ако покушамо да решимо задатак 'директно', ништа неће успети:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # исписаће '! baaa', а хтели смо '!x baaa'

Преглед напред

За решавање задатка потребан је начин да се каже да 'x' не треба мењати. То се ради помоћу специјалних заграда (?= ), које само проверавају, али не узимају са собом.

Ове заграде се зову позитиван преглед напред. Позитиван - јер 'x' (у нашем случају) мора да буде - само онда ће се замена десити.

Применимо ове заграде за решавање нашег задатка:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # исписаће '!x aaab

Постоји и негативан преглед напред - (?! ) - он, обрнуто, каже да нечега не би требало да буде. У следећем примеру, замена ће се десити само ако после 'aaa' стоји НЕ 'x':

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # исписаће 'aaax !b'

Преглед назад

Слично постоји позитиван преглед назад - (?<= ). У следећем примеру замена ће се десити само ако испред 'aaa' стоји 'x':

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # исписаће 'x!'

И постоји такође негативан преглед назад - (?<! ). У следећем примеру замена ће се десити само ако испред 'aaa' не стоји 'x':

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # исписаће 'b!'

Практични задаци

Дат је стринг који садржи имена функција:

txt = 'func1() func2() func3()'

Добијте низ имена функција из стринга.

Дат је стринг са тагом:

txt = '<a href="" class="eee" id="zzz">'

Добијте низ имена атрибута овог тага.

Дат је стринг са променљивим:

txt = '$aaa $bbb $ccc xxxx'

Добијте подстрингове испред којих стоји симбол долара.

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