Passende Nummer String Paare

Ich habe folgende Sample-String:

R10666: 273141 C1 + 273141 C2 + 273141 C3 + 273141 C4 + 273141 C5 - 273141 C6 

Ich möchte:

 [('273141','C1'), ..., ('- 273141', 'C6')] 

Die Zahlen können Gleitkommazahlen mit exponentieller Notation sein, dh - 2.5e-7 .

Mein aktueller Regex sieht so aus:

 re.findall(r'([+-]? \d+(\.\d*)?|\.\d+([eE][+-]?\d+)?)( [a-zA-Z0-9_]+)', split) 

Aber es macht nicht die richtige Ausgabe, was ist falsch damit?

Dies ist ein Beispielausgang:

 (' 273141', '', '', ' C1') 

Oder es stimmt nichts zu.

  • Regex für 1 oder 2 oder 3 Dezimalzahl, keine führenden Nullen, Präzision 2 und Fraktionen sind erlaubt
  • Parsen mit regex und drucken Sie die Zeile
  • Python 3 regex mit diakritischen und ligaturen,
  • Wer weiß, wie nosetest's -m, -i und -e arbeiten?
  • Python regelmäßiger Ausdruck mit utf8 Problem
  • Mit python, entfernen HTML-Tags / Formatierung aus einer Zeichenfolge
  • Zusammenstellung von regulären Ausdrücken in Python
  • Finde Regex zum Löschen von Duplikaten
  • 2 Solutions collect form web for “Passende Nummer String Paare”

    Ich habe die Floating Point Numbers mit einem regulären Expression Regex für Sie angepasst und verkürzte die Regex ein bisschen (beachten Sie die alternative Liste ist weg, dass bedeutet weniger Backtracking und die (?i) Fall unempfindlich passende Option vor, um [A-Za-z] in [az] ):

     import re s = "R10666: 273141 C1 + 273141 C2 + 273141 C3 + 273141 C4 + 273141 C5 - 273141 C6" print re.findall(r'(?i)([-+]?\s*\d*\.?\d+(?:[eE][-+]?\d+)?)(\s+\w+)', s) 

    Ausgabe der IDEONE Demo :

     [(' 273141', ' C1'), ('+ 273141', ' C2'), ('+ 273141', ' C3'), ('+ 273141', ' C4'), ('+ 273141', ' C5'), ('- 273141', ' C6')] 

    findall wird alle Submatches in die Ergebnisse setzen. In deinem Fall kommen die leeren Strings aus den unübertroffenen Dezimalstellen, wenn sie anwesend sind; So verwenden Sie nicht-Capture-Gruppen statt:

     ([+-]? \d+(?:\.\d*)?|\.\d+(?:[eE][+-]?\d+)?) ([a-zA-Z0-9_]+) 

    Ich habe auch den Raum an der zweiten Capture-Gruppe draussen bewegt, also bekommst du nicht diesen führenden Platz.

    Regex101 demo

    Ideone demo

    Python ist die beste Programmiersprache der Welt.