Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyPmREESCh 36 of 129 menu
◀ ▶

Erikoismerkkien escapaus Pythonin regexeissä

Oletetaan, että halutaan, että erikoismerkki tarkoittaa itseään. Tätä varten sitä tulee escapata kenoviivalla. Katsotaanpa esimerkein.

Esimerkki

Seuraavassa esimerkissä regexin tekijä halusi, että hakumalli näyttäisi tältä: kirjain 'a', sitten plus '+', sitten kirjain 'x'. Kuitenkin, koodin tekijä ei escapannut merkkiä '+', joten hakumalli itse asiassa näyttää tältä: kirjain 'a' yksi tai useampi kerta, sitten kirjain 'x':

txt = 'a+x ax aax aaax' res = re.sub('a+x', '!', txt) print(res)

Koodin suorituksen tulos:

'a+x ! ! !'

Esimerkki

Nyt tekijä on escapannut plus-merkin kenoviivalla. Nyt hakumalli näyttää halutulta: kirjain 'a', sitten plus '+', sitten kirjain 'x':

txt = 'a+x ax aax aaax' res = re.sub('a\+x', '!', txt) print(res)

Koodin suorituksen tulos:

'! ax aax aaax'

Esimerkki

Tässä esimerkissä hakumalli näyttää tältä: kirjain 'a', sitten piste '.', sitten kirjain 'x':

txt = 'a.x abx azx' res = re.sub('a\.x', '!', txt) print(res)

Koodin suorituksen tulos:

'! abx azx'

Esimerkki

Seuraavassa esimerkissä tekijä unohti escapata pisteen ja regex otti kaikki alimerkkijonot, koska escapaaamaton piste tarkoittaa mitä tahansa merkkiä:

txt = 'a.x abx azx' res = re.sub('a.x', '!', txt) print(res)

Koodin suorituksen tulos:

'! ! !'

Huomautus

Huomaa, että jos unohdat kenoviivan pisteelle (kun sen pitäisi tarkoittaa itseään) - tätä ei välttämättä edes huomaa:

res = re.sub('a.x', '!', 'a.x') print(res) # palauttaa '!', kuten halusimmekin

Visuaalisesti toimii oikein (koska piste tarkoittaa mitä tahansa merkkiä, myös tavallista pistettä '.'). Mutta jos vaihdat merkkijonon, jossa korvaukset tapahtuvat - näemme virheemme:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # palauttaa '! ! !', odotettiin '! abx azx'

Erikoismerkkien ja tavallisten merkkien lista

Jos escapaa tavallisen merkin - mitään kamalaa ei tapahdu - se tarkoittaa silti itseään. Poikkeus - numerot, niitä ei voi escapata.

Usein herää epäilys, onko tietty merkki erikoinen. Jotkut menevät siihen, että escapavat kaikki epäilyttävät merkit peräkkäin. Tämä on kuitenkin huono käytäntö (liottaa regexin kenoviivoilla).

Ovat erikoismerkkejä: $ ^ . * + ? \ / {} [] () |

Eivät ole erikoismerkkejä: @ : , ' " - _ = < > % # ~ `& !

Käytännön tehtävät

Annettu merkkijono:

txt = 'a.a aba aea'

Kirjoita regex, joka löytää merkkijonon 'a.a', ottaen muita.

Annettu merkkijono:

txt = '2+3 223 2223'

Kirjoita regex, joka löytää merkkijonon '2+3', ottaen muita.

Annettu merkkijono:

txt = '23 2+3 2++3 2+++3 345 567'

Kirjoita regex, joka löytää merkkijonot '2+3', '2++3', '2+++3', oattaen muita (+ voi olla mikä tahansa määrä).

Annettu merkkijono:

txt = '23 2+3 2++3 2+++3 445 677'

Kirjoita regex, joka löytää merkkijonot '23', '2+3', '2++3', '2+++3', ottaen muita.

Annettu merkkijono:

txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'

Kirjoita regex, joka löytää merkkijonot '*q+', '*qq+', '*qqq+', oattaen muita.

Annettu merkkijono:

txt = '[abc] {abc} abc (abc) [abc]'

Kirjoita regex, joka löytää merkkijonot hakasulkeissa ja korvaa ne '!':lla.

← →
↑
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ää