Ich schreibe ein schnelles Python-Skript, um einige unserer Hibernate Mapping-Dateien zu überprüfen. Ich versuche, dieses Stück Python zu verwenden, um die Tabellennamen eines POJO zu erhalten, ob sein Klassenpfad vollständig definiert ist:Backslashes in Python Regex
searchObj = re.search(r'<class name="(.*\\.|)' + pojo + '".*table="(.*?)"', contents)
aber - sagen pojo ‚MyObject‘ ist - die Regex ist nicht passend es zu dieser Zeile:
<class name="com.place.package.MyObject" table="my_cool_object" dynamic-insert="true" dynamic-update="true">
Wenn ich die Zeichenfolge gedruckt werden (während in Pdb gestoppt) ich bin auf der Suche, ich sehe dies:
'<class name="(.*\\\\.|)MyObject".*table="(.*?)"'
ich ziemlich verwirrt bin, was falsch läuft Hier. Zum einen hatte ich den Eindruck, dass das Präfix "r" es so gemacht hat, dass die Backslashes nicht entkommen konnten. Trotzdem, wenn ich eine der Schrägstriche entfernen, so dass mein Suchbegriff dies:
searchObj = re.search(r'<class name="(.*\.|)' + pojo + '".*table="(.*?)"', contents)
Und die Zeichenfolge gesucht wird
'<class name="(.*\\.|)MyObject".*table="(.*?)"'
Es ist noch kein Spiel zurück. Was läuft hier falsch? Der Regex-Ausdruck, den ich verwenden möchte, funktioniert auf regex101.com (mit nur einem Backslash im scheinbar problematischen Bereich.) Irgendeine Idee, was hier falsch läuft?
@Keatinge - Warum es nicht ist, dann passend, wenn ich nur einen Backslash? Der Regex sollte basierend auf dieser Site gut sein. Auch wenn es nur MyObject ist, stimmt es überein, aber wenn es com.place.package.MyObject ist, tut es das nicht. –