⊗pyPmREESCh 36 of 129 menu

Escapering av specialtecken i Pythons reguljära uttryck

Antag att vi behöver göra så att ett specialtecken representerar sig självt. För att göra detta ska det escapes med ett omvänt snedstreck. Låt oss titta på exempel.

Exempel

I följande exempel ville författaren till det reguljära uttrycket att sökmönstret skulle se ut så här: bokstaven 'a', sedan ett plus '+', sedan bokstaven 'x'. Men författaren av koden escade inte tecknet '+' och därför ser sökmönstret i verkligheten ut så här: bokstaven 'a' en eller flera gånger, sedan bokstaven 'x':

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

Resultat av kodkörning:

'a+x ! ! !'

Exempel

Och nu har författaren escapat plus-tecknet med ett omvänt snedstreck. Nu ser sökmönstret ut så som det ska: bokstaven 'a', sedan plus '+', sedan bokstaven 'x':

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

Resultat av kodkörning:

'! ax aax aaax'

Exempel

I detta exempel ser mönstret ut så här: bokstaven 'a', sedan en punkt '.', sedan bokstaven 'x':

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

Resultat av kodkörning:

'! abx azx'

Exempel

I nästa exempel glömde författaren att escapa snedstrecket och alla delsträngar träffades av det reguljära uttrycket, eftersom en oescaped punkt representerar vilket tecken som helst:

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

Resultat av kodkörning:

'! ! !'

Anmärkning

Notera att om du glömmer det omvända snedstrecket för en punkt (när den ska representera sig själv) - kan detta gå obemärkt förbi:

res = re.sub('a.x', '!', 'a.x') print(res) # returnerar '!', som vi ville

Visuellt fungerar det korrekt (eftersom punkten representerar vilket tecken som helst, inklusive en vanlig punkt '.'). Men om vi ändrar strängen där ersättningarna sker - kommer vi se vårt misstag:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # returnerar '! ! !', men förväntat var '! abx azx'

Lista över specialtecken och vanliga tecken

Om man escapar ett vanligt tecken - händer inget hemskt - det kommer fortfarande att representera sig självt. Undantaget är siffror, de kan inte escapes.

Ofta uppstår tvivel om ett visst tecken är ett specialtecken. Vissa kommer så långt att de escapar alla misstänkta tecken i rad. Detta är dock dålig praxis (förorenar det reguljära uttrycket med omvända snedstreck).

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

Är inte specialtecken: @ : , ' " - _ = < > % # ~ `& !

Praktiska uppgifter

Given en sträng:

txt = 'a.a aba aea'

Skriv ett reguljärt uttryck som hittar strängen 'a.a', utan att fånga de andra.

Given en sträng:

txt = '2+3 223 2223'

Skriv ett reguljärt uttryck som hittar strängen '2+3', utan att fånga de andra.

Given en sträng:

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

Skriv ett reguljärt uttryck som hittar strängarna '2+3', '2++3', '2+++3', utan att fånga de andra (+ kan vara vilket antal som helst).

Given en sträng:

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

Skriv ett reguljärt uttryck som hittar strängarna '23', '2+3', '2++3', '2+++3', utan att fånga de andra.

Given en sträng:

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

Skriv ett reguljärt uttryck som hittar strängarna '*q+', '*qq+', '*qqq+', utan att fånga de andra.

Given en sträng:

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

Skriv ett reguljärt uttryck som hittar strängarna i hakparenteser och ersätter dem med '!'.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa