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.

  • Strecke eine ausführliche pythonregex
  • Regex, um alle Interpunktion zu entfernen und alles, was in Klammern eingeschlossen ist
  • Python-IP-Validierung REGex-Validierung für vollständige und partielle IPs
  • Was ist der effizienteste Weg, um eine von mehreren Teilstrings in Python zu finden?
  • Python re.sub (): wie man alle 'u' oder 'U's mit' Sie '
  • Mehrfachvererbung in kratzigen Spinnen
  • Python Regex Interpunktion Erkennung
  • Was genau ist ein "roher String Regex" und wie können Sie es verwenden?
  • 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.