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.

  • Erfassungsgruppe mit Fund?
  • Re.match () gibt immer keine
  • Entfernen Sie Kommas in einer Zeichenkette, umgeben von einem Komma und doppelten Anführungszeichen / Python
  • Python-Extrakt Satz mit Wort
  • Python regex - warum endet der String ($ und \ Z) nicht mit Gruppenausdrücken?
  • Kennwort Checker
  • Probleme mit datetime.strptime ()
  • Einfügen von Zeichenfolge zum Ende der Nummer
  • 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.