Wie man komplizierte reguläre Ausdrücke für die Wiederverwendung in anderen Regex nennt

Ich analysiere einige Daten … sieht so aus

Fourier analysis for v(1): No. Harmonics: 20, THD: 24.6928 %, Gridsize: 200, Interpolation Degree: 1 Harmonic Frequency Magnitude Phase Norm. Mag Norm. Phase -------- --------- --------- ----- --------- ----------- 0 0 -1.4108e-005 0 0 0 1 100 1.81678 179.986 1 0 2 200 2.67431e-005 -89.68 1.472e-005 -269.67 3 300 0.374737 179.937 0.206264 -0.049661 4 400 2.57338e-005 -89.357 1.41645e-005 -269.34 5 500 0.185804 179.876 0.102271 -0.1108 6 600 2.46676e-005 -89.033 1.35777e-005 -269.02 7 700 0.112225 179.799 0.0617716 -0.18748 8 800 2.37755e-005 -88.71 1.30866e-005 -268.7 9 900 0.0757484 179.708 0.0416937 -0.27803 10 1000 2.31014e-005 -88.392 1.27156e-005 -268.38 11 1100 0.0558207 179.611 0.0307251 -0.37527 12 1200 2.25406e-005 -88.082 1.24069e-005 -268.07 13 1300 0.0439558 179.513 0.0241943 -0.47325 14 1400 2.19768e-005 -87.779 1.20966e-005 -267.77 15 1500 0.0362049 179.416 0.019928 -0.5704 16 1600 2.13218e-005 -87.483 1.1736e-005 -267.47 17 1700 0.0305653 179.316 0.0168239 -0.67046 18 1800 2.0553e-005 -87.194 1.13128e-005 -267.18 19 1900 0.0260612 179.207 0.0143447 -0.77967 

Es gibt mehrere Orte, an denen wir einige Float-Daten haben. Ich kann einen regelmäßigen Ausdruck für den Schwimmer machen, hier ist ein Teil der Re für die Linie.

 (?P<Magnitude>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?) 

Dieser Teil [-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)? Ist ziemlich kompliziert, also wäre es nett wenn es irgendeine Möglichkeit gibt, dies zu nennen und es wiederzuverwenden … so wie es wenn du unseren eigenen Meta-Charakter nennen könntest und das mit \f+ oder etwas ersetzen (dh wenn das die Meta war) -charakter für float, was es nicht ist …). Auf diese Weise habe ich das von dieser Frage bekommen .

Also suche ich einen guten Ansatz, diese Komplexität zu enthalten. Ich könnte wahrscheinlich String-Verkettung oder Formatierung auf der Muster-String verwenden, aber ich frage mich, ob es einen besseren Weg gibt. Vielleicht fehlt mir etwas offensichtlich.

Hier ist der unhandliche Ausdruck

 re.compile(r"^\s*(?P<Harmonic>\d+)\s+(?P<Frequency>\d+)\s+(?P<Magnitude>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+(?P<Phase>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+(?P<NormMag>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+(?P<MormPhase>[-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s+$", re.MULTILINE) 

One Solution collect form web for “Wie man komplizierte reguläre Ausdrücke für die Wiederverwendung in anderen Regex nennt”

Für diese Art von größeren regexes mit wiederholten Teilen neige ich dazu, eine Liste von Klumpen von regex zu haben, dann kombiniere sie alle in eine programmgesteuert.

Also in JavaScript:

 var string = /"[^"]+(?:\\"[^"]+)+"/.source, float = /\d+\.\d+/.source; var string_and_int = new RegExp(float + "|(?:" + int + ")?" + string + "|" + string + float, "g"); 

Ein bisschen rudimentär, aber man bekommt die Idee. Dies kann es einfacher machen, Bits von Regex-Code wiederzuverwenden und es in einer etwas besser lesbaren Weise zu ordnen.

  • Regex, um% Alter und Werte in Python zu teilen
  • Zusammenstellung von regulären Ausdrücken in Python
  • Verwenden eines RegEx, um IP-Adressen in Python anzupassen
  • Python und Regex - Extrahieren einer Zahl aus einer Zeichenfolge
  • Parsing GPS-Empfänger Ausgabe über Regex in Python
  • Ungerades Verhalten mit Python regulären Ausdrücken - findall findet nur den "()?" - Teil
  • Python Regex ersetzt Zeichenfolge, die nicht übereinstimmen sollte
  • Unmöglicher Blick mit einer Rückseitigkeit
  • Python regulärer Ausdruck (Regex) Match Komma getrennte Nummer - warum funktioniert das nicht?
  • Parse-Werte aus einem Textblock anhand bestimmter Schlüssel
  • Python re.sub: ignorieren Rückreferenzen in der Ersatzzeichenfolge
  • Python ist die beste Programmiersprache der Welt.