2009-06-26 17 views
4

Ich bin ein „nichts zu wiederholen“ immer Fehler, wenn ich versuche, dies zu kompilieren:Wie für Tags mit ‚+‘ in Python analysieren

search = re.compile(r'([^a-zA-Z0-9])(%s)([^a-zA-Z0-9])' % '+test', re.I) 

Das Problem ist, das ‚+‘ Zeichen. Wie soll ich damit umgehen?

Antwort

9
re.compile(r'([^a-zA-Z0-9])(%s)([^a-zA-Z0-9])' % '\+test', re.I) 

Das "+" ist der "Wiederholung mindestens einmal" Quantifizierer in regulären Ausdrücken. Es muss etwas folgen, das wiederholbar ist, oder es muss es maskiert werden, wenn Sie ein Literal "+" abgleichen möchten.

Besser ist das, wenn Sie Ihre Regex dynamisch erstellen möchten.

re.compile(r'([^a-zA-Z0-9])(%s)([^a-zA-Z0-9])' % re.escape('+test'), re.I) 
+0

Beide so schnell von der Marke! Ein dies scheint in Ordnung zu funktionieren, wo es eine Variable ist tag = '+ test' (oder tag = 'test') search = re.compile (r '([^ a-zA-Z0-9]) (% s) ([^ a-zA-Z0-9]) '% r' \% s '% tag, re.I) Danke euch beiden. – PhoebeB

5

Entfliehen Sie das Plus:

r'\+test' 

Das Plus hat eine besondere Bedeutung in regulären Ausdrücken (im Sinne von "die bisherigen Vorstellungen einmal oder mehrmals"). Da es in Ihrem Regex nach einem offenen Paren angezeigt wird, gibt es kein "vorheriges", um wiederholt zu passen.