⊗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ää