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.

  • Wie benutzt man den regulären Ausdruck, um Daten in Python abzurufen?
  • Wie kann ein rekursiver Regexp in Python umgesetzt werden?
  • Zusammenpassende Termine mit regulären Ausdrücken in Python?
  • Ersetzen Sie URLs im Text mit Links zu URLs
  • Optionaler Punkt in Regex
  • Beste Weg, um Wörter in Zahlen mit bestimmten Wortliste zu ändern
  • Regex für 1 oder 2 oder 3 Dezimalzahl, keine führenden Nullen, Präzision 2 und Fraktionen sind erlaubt
  • Webscraper wird nicht funktionieren
  • Wie kann ich Video-ID aus dem YouTube-Link in Python extrahieren?
  • Entfernen unicode emoji mit re in python
  • RegEx: Finde alle Ziffern nach bestimmten Strings
  • Python ist die beste Programmiersprache der Welt.