⊗pyPmREESCh 36 of 129 menu

Escaping af specialtegn i Python regex

Antag, at vi skal gøre sådan, at et specialtegn betyder sig selv. For at gøre dette skal det escapes med et omvendt skråstreg. Lad os se på eksempler.

Eksempel

I det følgende eksempel ønskede forfatteren af regexet, at søgemønstret skulle se sådan ud: bogstavet 'a', derefter plus '+', derefter bogstavet 'x'. Men forfatteren af koden escapede ikke tegnet '+', og derfor ser søgemønstret faktisk sådan ud: bogstavet 'a' en eller flere gange, derefter bogstavet 'x':

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

Resultatet af kodeudførelsen:

'a+x ! ! !'

Eksempel

Og i dette eksempel escapede forfatteren plustegnet med et omvendt skråstreg. Nu ser søgemønstret ud, som det skal: bogstavet 'a', derefter plus '+', derefter bogstavet 'x':

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

Resultatet af kodeudførelsen:

'! ax aax aaax'

Eksempel

I dette eksempel ser mønstret sådan ud: bogstavet 'a', derefter punktum '.', derefter bogstavet 'x':

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

Resultatet af kodeudførelsen:

'! abx azx'

Eksempel

I det følgende eksempel glemte forfatteren at escape skråstregen, og under regexet faldt alle delstrenge, da en ikke-escaped punktum betyder ethvert tegn:

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

Resultatet af kodeudførelsen:

'! ! !'

Bemærkning

Læg mærke til, at hvis du glemmer det omvendte skråstreg for punktum (når det skal betyde sig selv) - kan det være svært at opdage:

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

Visuelt fungerer det korrekt (da punktum betyder ethvert tegn, inklusive et almindeligt punktum '.'). Men hvis vi ændrer strengen, hvor der foretages erstatninger - vil vi se vores fejl:

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

Liste over specialtegn og almindelige tegn

Hvis man escape et almindeligt tegn - sker der ikke noget skrækkeligt - det vil stadig betyde sig selv. Undtagelsen er cifre, de kan ikke escapes.

Ofte opstår der tvivl om, hvorvidt et givet tegn er et specialtegn. Nogle kommer så langt som at escape alle mistænkelige tegn i træk. Dette er dog en dårlig praksis (roder regexet til med omvendte skråstreger).

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

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

Praktiske opgaver

Givet strengen:

txt = 'a.a aba aea'

Skriv et regulært udtryk, der finder strengen 'a.a', uden at fange de andre.

Givet strengen:

txt = '2+3 223 2223'

Skriv et regulært udtryk, der finder strengen '2+3', uden at fange de andre.

Givet strengen:

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

Skriv et regulært udtryk, der finder strengene '2+3', '2++3', '2+++3', uden at fange de andre (+ kan være et vilkårligt antal).

Givet strengen:

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

Skriv et regulært udtryk, der finder strengene '23', '2+3', '2++3', '2+++3', uden at fange de andre.

Givet strengen:

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

Skriv et regulært udtryk, der finder strengene '*q+', '*qq+', '*qqq+', uden at fange de andre.

Givet strengen:

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

Skriv et regulært udtryk, der finder strengene i kantede parenteser og erstatter dem med '!'.

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