2013-02-08 4 views
8

Python einen Flag bietet (re.X or re.VERBOSE) Annotation von regulären Ausdrücken zu ermöglichen:Python re.X vs Automagic Linie Fortsetzung

a = re.compile(r"""\d + # the integral part 
        \. # the decimal point 
        \d * # some fractional digits""", re.X) 

jedoch mit automatischer String-Verkettung, könnte man im Grunde das Gleiche erreichen:

a = re.compile(r'\d+' # integral part 
       r'\.' # decimal point 
       r'\d*' # optional fractional digits 
      ) 

Ich glaube nicht, dass ich wirklich die letztere Form verwendet habe, aber (IMHO) macht es für einen leichter zu lesen Regex (Ich muss nicht versuchen, herauszufinden, welche Whitespace wurde entkommen, und whitespace wird ignoriert ... etc. etc.) und meine Kommentare bekommen formatiert von meinem Texteditor als Kommentare. Gibt es einen Grund, ersteres dem letzteren oder Visa-Vers vorzuziehen? Oder ist das wirklich ein Tomaten-Tomaten-Problem?

Antwort

4

Ersterer kann in eine eigene Textdatei geschrieben und dann ohne Rückgriff auf literal_eval geladen werden. Bei komplizierten REs (oder einer Auswahl von mehreren verschiedenen REs) kann das ein Vorteil sein.

3

Ich würde sagen, es ist Tomaten-Tomahto. Das Flag "x" für den regulären Ausdruck ist nicht exklusiv für Python und kann in Sprachen, in denen die Verkettungsoperation ausführlicher ist (z. B. + überall zum Rauschen hinzufügen), sinnvoller sein.

Ich denke auch an die Tatsache, dass es Sie erzwingt, whitespace ist Teil des Ausdrucks als eine positive Sache richtig, da es jede Mehrdeutigkeit entfernt und macht es schwer, Macken in Regexen, die abhängig von Leerzeichen sind zu verpassen.

Ein letztes Argument ist, dass Sie das genaue Muster in eine andere Sprache kopieren können, die die gleiche Flagge hat, und es wird ohne viel Aufwand funktionieren. Im letzteren Fall müsste ich viele r s und Apostrophe entfernen.


Durch die Art und Weise Sie immer mit die re.X Option verketten kann.

+0

Yeah - Ich wusste nicht, dass andere Sprachen dieses Feature haben - ich nehme an, dass der einzige Ort, wo ich 'regex' benutze, ist mit Python, einfachen sed-Ausdrücken und hin und wieder zu meinen Emacs hinzuzufügen Syntaxtabelle. Das ist ein guter Punkt. – mgilson