⊗pyPmRELAB 72 of 129 menu

Pozitívny a negatívny pohľad v regulárnych výrazoch Python

Niekedy je potrebné vyriešiť úlohu tohto typu: nájsť reťazec 'aaa' a nahradiť ho na '!', ale iba ak za 'aaa' nasleduje 'x', pričom samotné 'x' sa nenahrádza. Ak sa pokúsime vyriešiť úlohu 'priamo', nič sa nám nepodarí:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # vypíše '! baaa', ale chceli sme '!x baaa'

Pohľad dopredu

Na vyriešenie úlohy je potrebný spôsob, ako povedať, že 'x' by sa nemalo nahrádzať. Robí sa to pomocou špeciálnych zátvoriek (?= ), ktoré iba kontrolujú, ale neberú so sebou.

Tieto zátvorky sa nazývajú pozitívny pohľad dopredu. Pozitívny - pretože 'x' (v našom prípade) musí byť prítomný - až vtedy prebehne nahradenie.

Použime tieto zátvorky na vyriešenie nášho problému:

txt = 'aaax baaa' res = re.sub('aaa(?=x)', '!', txt) print(res) # vypíše '!x aaab

Existuje aj negatívny pohľad dopredu - (?! ) - ten naopak hovorí, že niečo by nemalo byť prítomné. V nasledujúcom príklade nahradenie prebehne iba ak za 'aaa' nie je 'x':

txt = 'aaax aaab' res = re.sub('aaa(?!x)', '!', txt) print(res) # vypíše 'aaax !b'

Pohľad dozadu

Podobne existuje pozitívny pohľad dozadu - (?<= ). V nasledujúcom príklade nahradenie prebehne iba ak pred 'aaa' je 'x':

txt = 'xaaa' res = re.sub('(?<=x)aaa', '!', txt) print(res) # vypíše 'x!'

A tiež existuje negatívny pohľad dozadu - (?<! ). V nasledujúcom príklade nahradenie prebehne iba ak pred 'aaa' nie je 'x':

txt = 'baaa' res = re.sub('(?<!x)aaa', '!', txt) print(res) # vypíše 'b!'

Praktické úlohy

Daný reťazec obsahujúci názvy funkcií:

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

Získajte pole názvov funkcií z reťazca.

Daný reťazec s tagom:

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

Získajte pole názvov atribútov tohto tagu.

Daný reťazec s premennými:

txt = '$aaa $bbb $ccc xxxx'

Získajte podreťazce, pred ktorými je znak dolára.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť