2016-06-15 18 views
0
var glob_json = 
{ 
    abc 

Ich möchte etwas passen util die { so habe ich so etwas wie unten:Regex Matching mit Escape-Sequenzen

if re.match(r"(.*)var glob_json =\n{", line, re.DOTALL | re.MULTILINE) 

aber es funktioniert nicht wie in I somethinglike, wenn die Regex Druck Anw haben aber es wird nicht exceute. Alles, was ich tun möchte, ist, nach den geschweiften Klammern und vor abc Text einzufügen.

+1

Was? Könnten Sie spezifischer sein als * "funktioniert nicht" *? '{{' würde ein '{' in einer Python-Format-Zeichenkette entkommen, aber es ist kein Sonderzeichen in regulären Ausdrücken. – jonrsharpe

+1

Bitte zeigen Sie Ihre komplette Eingabe und die gewünschte Ausgabe an. – alecxe

+0

@jonrsharpe: Ich möchte bis zum {und dann fügen Sie einen Text danach hinzu. – Piya

Antwort

1

{ ist ein Metazeichen, so dass es mit \{ entkommen würde sicherlich funktionieren. Wenn ich jedoch Ihr Problem richtig verstehe, kann es eine einfachere Lösung geben. Dieses Muster passt alles, was Sie nicht brauchen NICHT {

[^{] 

Innen [] ist zu entkommen (die meisten) Metazeichen. Wenn Sie mehrere Dinge vergleichen möchten, bis Sie eine { treffen, dann fügen Sie die { in Ihre Übereinstimmung ein. Sie können eine + oder eine * hinzufügen, was "mindestens eine" oder "eine oder mehrere" bedeutet. So ...

if re.match(r"[^{]+\{", line) ... 
+0

nicht sicher stimmt, warum es nicht funktioniert: 'if re.match (r "(. *) Var glob_json = [\ s \ n] [{]", Text , re.MULTILINE): re (r "((*) var glob_json = [\ s \ n] * \ {)", r "\ 1 {}". format (addText), Text) 'Weiter ich probierte like \ {auch gut, aber mein datei evaluieren für wahr von regex übereinstimmen – Piya

+0

Ihr Code funktioniert in der Tat für mich, aber zwei Dinge zu beachten. 1: gibt eine neue Zeichenkette zurück, verändert sie nicht an Ort und Stelle. 2: Hier ist eine viel einfachere Version dessen, was Sie erreichen möchten: re ("([^ {] + \ {)", r "\ 1 {}". Format (addText), Text). Wenn es zu nichts passt, wird nur die ursprüngliche Zeichenfolge zurückgegeben. Keine Notwendigkeit für ein re.match. –