⊗pyPmREESCh 36 of 129 menu

Escaperen van speciale tekens in Python regex

Stel dat we willen dat een speciaal teken zichzelf vertegenwoordigt. Om dit te bereiken moet het geëscaped worden met een backslash. Laten we eens kijken naar voorbeelden.

Voorbeeld

In het volgende voorbeeld wilde de auteur van de regex dat het zoekpatroon er als volgt uitzag: letter 'a', dan een plus '+', dan letter 'x'. De auteur van de code heeft het teken '+' echter niet geëscaped en daarom ziet het zoekpatroon er in werkelijkheid als volgt uit: letter 'a' een of meer keer, dan letter 'x':

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

Resultaat van de code-uitvoering:

'a+x ! ! !'

Voorbeeld

En nu heeft de auteur de plus geëscaped met een backslash. Nu ziet het zoekpatroon er uit zoals bedoeld: letter 'a', dan plus '+', dan letter 'x':

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

Resultaat van de code-uitvoering:

'! ax aax aaax'

Voorbeeld

In dit voorbeeld ziet het patroon er als volgt uit: letter 'a', dan punt '.', dan letter 'x':

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

Resultaat van de code-uitvoering:

'! abx azx'

Voorbeeld

In het volgende voorbeeld vergat de auteur de punt te escapen en trof de regex alle substrings, omdat een niet-geëscapte punt staat voor elk willekeurig teken:

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

Resultaat van de code-uitvoering:

'! ! !'

Opmerking

Let op dat als je de backslash voor de punt vergeet (wanneer de punt zichzelf moet vertegenwoordigen) - dit zelfs onopgemerkt kan blijven:

res = re.sub('a.x', '!', 'a.x') print(res) # retourneert '!', zoals we wilden

Visueel werkt het correct (omdat de punt voor elk willekeurig teken staat, inclusief een gewone punt '.'). Maar als we de string veranderen waarin de vervangingen plaatsvinden - dan zien we onze fout:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # retourneert '! ! !', maar werd verwacht '! abx azx'

Lijst van speciale tekens en gewone tekens

Als je een gewoon teken escapest - gebeurt er niets ergs - het zal nog steeds zichzelf vertegenwoordigen. Uitzondering - cijfers, deze kunnen niet geëscaped worden.

Vaak bestaat er twijfel of een bepaald teken speciaal is. Sommigen gaan zo ver dat ze alle verdachte tekens achter elkaar escapen. Dit is echter een slechte gewoonte (vervuilt de regex met backslashes).

Speciale tekens zijn: $ ^ . * + ? \ / {} [] () |

Geen speciale tekens zijn: @ : , ' " - _ = < > % # ~ `& !

Praktische taken

Gegeven de string:

txt = 'a.a aba aea'

Schrijf een regex die de string 'a.a' vindt, zonder de anderen te pakken.

Gegeven de string:

txt = '2+3 223 2223'

Schrijf een regex die de string '2+3' vindt, zonder de anderen te pakken.

Gegeven de string:

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

Schrijf een regex die de strings '2+3', '2++3', '2+++3' vindt, zonder de anderen te pakken (+ kan elk aantal zijn).

Gegeven de string:

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

Schrijf een regex die de strings '23', '2+3', '2++3', '2+++3' vindt, zonder de anderen te pakken.

Gegeven de string:

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

Schrijf een regex die de strings '*q+', '*qq+', '*qqq+' vindt, zonder de anderen te pakken.

Gegeven de string:

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

Schrijf een regex die de strings in vierkante haakjes vindt en ze vervangt door '!'.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren