2013-11-22 6 views
6

Gibt es eine Möglichkeit, die Kompilierung oder Verwendung von Metazeichen beim Kompilieren von Regexen zu aktivieren? Der aktuelle Code sieht wie folgt aus:Gibt es eine einfache Möglichkeit, zwischen dem Verwenden und Ignorieren von Metazeichen in regulären Python-Ausdrücken zu wechseln?


Aktueller Code:

import re 

the_value = '192.168.1.1' 
the_regex = re.compile(the_value) 

my_collection = ['192a168b1c1', '192.168.1.1'] 

my_collection.find_matching(the_regex) 

result = ['192a168b1c1', '192.168.1.1'] 


Die ideale Lösung wie aussehen:

import re 

the_value = '192.168.1.1' 
the_regex = re.compile(the_value, use_metacharacters=False) 

my_collection = ['192a168b1c1', '192.168.1.1'] 

my_collection.find_matching(the_regex) 

result = ['192.168.1.1'] 

Die ideale Lösung wäre lass die re Bibliothek behandeln die Deaktivierung von Metazeichen, um zu vermeiden, so weit wie möglich in den Prozess einbezogen werden.

+1

, wenn Sie für eine statische Zeichenfolge suchen, warum Sie das re-Modul verwenden möchten? Warum vergleichen Sie nicht einfach Strings auf Gleichheit oder suchen nach einem Teilstring? –

Antwort

7

Nein. Allerdings:

the_regex = re.compile(re.escape(the_value)) 
6

Verwenden Sie die re.escape() Funktion dafür.

Rückgabestring mit allen nicht alphanumerischen Rückstrichen; Dies ist nützlich, wenn Sie eine beliebige Literal-Zeichenfolge abgleichen möchten, die möglicherweise Meta-Zeichen für reguläre Ausdrücke enthält.

>>> import re 
>>> re.escape('192.168.1.1') 
'192\\.168\\.1\\.1' 
+0

Danke! Ich akzeptiere Ignacios Antwort, weil es technisch die vollständige Lösung ist. Aber ich schätze Ihre Antwort und Ihre Hilfe :). –

+0

Während ich denke, das ist die bessere Antwort, da es auf die Dokumentation verweist und zitiert ... –