⊗pyPmREESCh 36 of 129 menu

Maskierung von Sonderzeichen in Python-Regex

Angenommen, wir möchten, dass ein Sonderzeichen sich selbst darstellt. Dazu muss es mit einem Backslash maskiert werden. Schauen wir uns einige Beispiele an.

Beispiel

Im folgenden Beispiel wollte der Autor des regulären Ausdrucks, dass das Suchmuster so aussieht: Buchstabe 'a', dann Plus '+', dann Buchstabe 'x'. Allerdings hat der Code-Autor das Symbol '+' nicht maskiert, und deshalb sieht das Suchmuster in Wirklichkeit so aus: Buchstabe 'a' ein- oder mehrmals, dann Buchstabe 'x':

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

Ergebnis der Codeausführung:

'a+x ! ! !'

Beispiel

Jetzt hat der Autor das Plus mit einem Backslash maskiert. Nun sieht das Suchmuster so aus, wie es soll: Buchstabe 'a', dann Plus '+', dann Buchstabe 'x':

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

Ergebnis der Codeausführung:

'! ax aax aaax'

Beispiel

In diesem Beispiel sieht das Muster so aus: Buchstabe 'a', dann Punkt '.', dann Buchstabe 'x':

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

Ergebnis der Codeausführung:

'! abx azx'

Beispiel

Im nächsten Beispiel hat der Autor vergessen, den Punkt zu maskieren, und es wurden alle Teilzeichenketten erfasst, da ein nicht maskierter Punkt für ein beliebiges Zeichen steht:

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

Ergebnis der Codeausführung:

'! ! !'

Hinweis

Beachten Sie, dass man es möglicherweise nicht bemerkt, wenn man den Backslash für den Punkt vergisst (wenn er sich selbst darstellen soll):

res = re.sub('a.x', '!', 'a.x') print(res) # gibt '!' zurück, wie gewünscht

Visuell funktioniert es korrekt (da der Punkt für ein beliebiges Zeichen steht, einschließlich eines normalen Punktes '.'). Aber wenn wir die Zeichenkette ändern, in der die Ersetzungen stattfinden - sehen wir unseren Fehler:

res = re.sub('a.x', '!', 'a.x abx azx') print(res) # gibt '! ! !' zurück, erwartet wurde '! abx azx'

Liste der Sonderzeichen und gewöhnlichen Zeichen

Wenn man ein gewöhnliches Zeichen maskiert - passiert nichts Schlimmes - es wird weiterhin sich selbst darstellen. Eine Ausnahme sind Ziffern, diese können nicht maskiert werden.

Oft besteht Unsicherheit, ob ein bestimmtes Zeichen ein Sonderzeichen ist. Manche neigen dazu, alle verdächtigen Zeichen wahllos zu maskieren. Dies ist jedoch eine schlechte Praxis (verschmutzt den regulären Ausdruck mit Backslashes).

Sonderzeichen sind: $ ^ . * + ? \ / {} [] () |

Keine Sonderzeichen sind: @ : , ' " - _ = < > % # ~ `& !

Praktische Aufgaben

Gegeben ist die Zeichenkette:

txt = 'a.a aba aea'

Schreiben Sie einen regulären Ausdruck, der die Zeichenkette 'a.a' findet, ohne die anderen zu erfassen.

Gegeben ist die Zeichenkette:

txt = '2+3 223 2223'

Schreiben Sie einen regulären Ausdruck, der die Zeichenkette '2+3' findet, ohne die anderen zu erfassen.

Gegeben ist die Zeichenkette:

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

Schreiben Sie einen regulären Ausdruck, der die Zeichenketten '2+3', '2++3', '2+++3', findet, ohne die anderen zu erfassen (+ kann beliebig oft vorkommen).

Gegeben ist die Zeichenkette:

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

Schreiben Sie einen regulären Ausdruck, der die Zeichenketten '23', '2+3', '2++3', '2+++3' findet, ohne die anderen zu erfassen.

Gegeben ist die Zeichenkette:

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

Schreiben Sie einen regulären Ausdruck, der die Zeichenketten '*q+', '*qq+', '*qqq+', findet, ohne die anderen zu erfassen.

Gegeben ist die Zeichenkette:

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

Schreiben Sie einen regulären Ausdruck, der die Zeichenketten in eckigen Klammern findet und sie durch '!' ersetzt.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικά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
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen