⊗pyPmRELAB 72 of 129 menu

Przegląd dodatni i ujemny w wyrażeniach regularnych Pythona

Czasami trzeba rozwiązać zadanie tego typu: znaleźć ciąg 'aaa' i zamienić go na '!', ale tylko jeśli po 'aaa' znajduje się 'x', a samego 'x' przy tym nie zamieniać. Jeśli spróbujemy rozwiązać zadanie 'na siłę', to nic nam nie wyjdzie:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # wypisze '! baaa', a chcieliśmy '!x baaa'

Przegląd do przodu

Aby rozwiązać zadanie, potrzebny jest sposób, aby powiedzieć, że 'x' nie należy zamieniać. Robi się to za pomocą specjalnych nawiasów (?= ), które tylko sprawdzają, ale nie pobierają ze sobą.

Te nawiasy nazywają się przegląd dodatni do przodu. Dodatni - ponieważ 'x' (w naszym przypadku) musi być - tylko wtedy nastąpi zamiana.

Zastosujmy te nawiasy do rozwiązania naszego zadania:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # wypisze '!x aaab

Istnieje też przegląd ujemny do przodu - (?! ) - on, przeciwnie, mówi, że czegoś nie powinno być. W następnym przykładzie zamiana nastąpi tylko jeśli po 'aaa' NIE znajduje się 'x':

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # wypisze 'aaax !b'

Przegląd do tyłu

Analogicznie istnieje przegląd dodatni do tyłu - (?<= ). W następnym przykładzie zamiana nastąpi tylko, jeśli przed 'aaa' znajduje się 'x':

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # wypisze 'x!'

Istnieje również przegląd ujemny do tyłu - (?<! ). W następnym przykładzie zamiana nastąpi tylko, jeśli przed 'aaa' nie znajduje się 'x':

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # wypisze 'b!'

Zadania praktyczne

Dany jest ciąg zawierający nazwy funkcji:

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

Pobierz tablicę nazw funkcji z ciągu.

Dany jest ciąg z tagiem:

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

Pobierz tablicę nazw atrybutów tego tagu.

Dany jest ciąg ze zmiennymi:

txt = '$aaa $bbb $ccc xxxx'

Pobierz podciągi, przed którymi znajduje się znak dolara.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć