Ich möchte Ihre Hilfe fragen.Python: Regex, um Daten zu fangen
Ich habe ein großes Stück von Daten, die wie folgt aussieht:
a
b : c 901
d : e sda
v
w : x ads
any
abc : def 12132
ghi : jkl dasf
mno : pqr fas
stu : vwx utu
Beschreibung: Datei mit einer Zeile beginnt enthält einzelnes Wort (es kann mit Leerzeichen beginnen und Leerzeichen können auch nach dem Wort sein), folgt dann Zeile von Attributen getrennt durch Doppelpunkt (kann auch Leerzeichen haben), dann wieder Zeile von Attributen oder Zeile mit einem einzelnen Wort. Ich kann nicht die richtige regex schaffen es in einer solchen Form zu fangen:
{
"a": [["b": "c 901"], ["d", "e sda"]],
"v": [["w", "x ads"]],
"any": ["abc", "def 12132"], ["ghi", "jkl dasf"],
# etc.
}
Hier ist, was ich versucht habe:
regex = str()
regex += "^(?:(?:\\s*)(.*?)(?:\\s*))$",
regex += "(?:(?:^(?:\\s*)(.*?)(?:\\s*):(?:\\s*)(.*?)(?:\\s*))$)*$"
pattern = re.compile(regex, re.S | re.M)
es jedoch nicht finden, was ich brauche. Kannst du mir helfen? Ich weiß, dass ich Datei ohne Regex verarbeiten könnte, mit Zeile-für-Zeile-Iterator und nach ":" Symbol suchen, aber Datei ist zu groß, um es auf diese Weise zu verarbeiten (wenn Sie es schnell ohne Regex verarbeiten können, wird dies auch sein) richtige Antwort, aber zuerst ist das zu langsam).
Vielen Dank im Voraus!
P.S. In der kanonischen Form der Datei wie folgt aussieht:
a
b : c 901
d : e sda
Jeder Abschnitt mit einem einzigen Wort beginnt, dann Attribute Linie folgen (nach zwei Leerzeichen), werden dort Attribute getrennt mit („:“), dann Agane Attribute Linie oder Zeile mit einem einzelnen Wort. Andere Leerzeichen sind verboten. Wahrscheinlich wird es einfacher sein.
+1 Super-Clarity; Ordentlich gerahmte Frage. – Yavar