⊗pyPmRELAB 72 of 129 menu

Positiivinen ja negatiivinen eteen- ja taaksepäin katselu Pythonin säännöllisissä lausekkeissa

Joskus on ratkaistava seuraavanlainen tehtävä: etsi merkkijono 'aaa' ja korvaa se merkkijonolla '!', mutta vain jos 'aaa'n jälkeen on 'x', mutta 'x'ä ei itsessään korvata. Jos yritämme ratkaista tehtävän 'suoraan', emme onnistu:

txt = 'aaax baaa' res = re.sub('aaax', '!', txt) print(res) # tulostaa '! baaa', halusimme '!x baaa'

Eteenpäin katselu

Tehtävän ratkaisemiseksi tarvitaan tapa sanoa, että 'x'ä ei tulisi korvata. Tämä tehdään erikoisilla sulkeilla (?= ), jotka vain katsovat, mutta eivät ota mukaansa.

Näitä sulkeita kutsutaan positiiviseksi eteenpäin katseluksi. Positiivinen - koska 'x'n (meidän tapauksessamme) on oltava - vain silloin korvaus tapahtuu.

Sovelletaan näitä sulkeita tehtävämme ratkaisemiseen:

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

On olemassa myös negatiivinen eteenpäin katselu - (?! ) - se puolestaan sanoo, että jotain ei saa olla. Seuraavassa esimerkissä korvaus tapahtuu vain, jos 'aaa'n jälkeen EI ole 'x':

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

Taaksepäin katselu

Vastaavasti on olemassa positiivinen taaksepäin katselu - (?<= ). Seuraavassa esimerkissä korvaus tapahtuu vain, jos 'aaa'n edessä on 'x':

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

Ja on myös olemassa negatiivinen taaksepäin katselu - (?<! ). Seuraavassa esimerkissä korvaus tapahtuu vain, jos 'aaa'n edessä EI ole 'x':

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

Käytännön tehtäviä

Annettu merkkijono, joka sisältää funktion nimiä:

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

Hanki funktioiden nimet taulukkona merkkijonosta.

Annettu merkkijono tagilla:

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

Hanki tämän tagin attribuuttien nimet taulukkona.

Annettu merkkijono muuttujilla:

txt = '$aaa $bbb $ccc xxxx'

Hanki merkkijonot, joiden edessä on dollarimerkki.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää