⊗pyPmREESCh 36 of 129 menu

Escaping av spesialtegn i regex i Python

Anta at vi ønsker at et spesialtegn skal representere seg selv. For å gjøre dette må det escapes med en omvendt skråstrek. La oss se på noen eksempler.

Eksempel

I det følgende eksempelet ønsket forfatteren av regexet at søkemønsteret skulle se slik ut: bokstaven 'a', deretter plusstegn '+', deretter bokstaven 'x'. Imidlertid escapte ikke kodeforfatteren tegnet '+', og derfor ser søkemønsteret egentlig slik ut: bokstaven 'a' en eller flere ganger, så bokstaven 'x':

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

Resultat av kjøring av koden:

'a+x ! ! !'

Eksempel

Nå har forfatteren escapt plusstegnet med en omvendt skråstrek. Nå ser søkemønsteret slik ut, som det skal: bokstaven 'a', deretter plusstegn '+', deretter bokstaven 'x':

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

Resultat av kjøring av koden:

'! ax aax aaax'

Eksempel

I dette eksempelet ser mønsteret slik ut: bokstaven 'a', deretter punktum '.', deretter bokstaven 'x':

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

Resultat av kjøring av koden:

'! abx azx'

Eksempel

I det følgende eksempelet glemte forfatteren å escape punktummet, og alle delstrenger ble fanget opp av regexet, fordi et uescapet punktum representerer et hvilket som helst tegn:

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

Resultat av kjøring av koden:

'! ! !'

Merknad

Legg merke til at hvis du glemmer den omvendte skråstreken for punktum (når det skal representere seg selv) - kan det være vanskelig å legge merke til:

res = re.sub('a.x', '!', 'a.x') print(res) # returnerer '!', som vi ønsket

Visuelt fungerer det riktig (fordi punktum representerer et hvilket som helst tegn, inkludert et vanlig punktum '.'). Men hvis vi endrer strengen der erstatningene skjer - vil vi se feilen vår:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # returnerer '! ! !', men forventet var '! abx azx'

Liste over spesialtegn og vanlige tegn

Hvis du escaper et vanlig tegn - vil ingenting alvorlig skje - det vil fortsatt representere seg selv. Unntaket - sifre, de kan ikke escapes.

Det oppstår ofte tvil om et gitt tegn er et spesialtegn. Noen ender opp med å escape alle mistenkelige tegn på rad. Dette er imidlertid en dårlig praksis (rotet til regexet med omvendte skråstreker).

Følgende er spesialtegn: $ ^ . * + ? \ / {} [] () |

Følgende er ikke spesialtegn: @ : , ' " - _ = < > % # ~ `& !

Praktiske oppgaver

Gitt en streng:

txt = 'a.a aba aea'

Skriv et regex som finner strengen 'a.a', uten å fange de andre.

Gitt en streng:

txt = '2+3 223 2223'

Skriv et regex som finner strengen '2+3', uten å fange de andre.

Gitt en streng:

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

Skriv et regex som finner strengene '2+3', '2++3', '2+++3', uten å fange de andre (+ kan være et hvilket som helst antall).

Gitt en streng:

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

Skriv et regex som finner strengene '23', '2+3', '2++3', '2+++3', uten å fange de andre.

Gitt en streng:

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

Skriv et regex som finner strengene '*q+', '*qq+', '*qqq+', uten å fange de andre.

Gitt en streng:

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

Skriv et regex som finner strengene i klammeparenteser og erstatter dem med '!'.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis