Voglio chiedere il vostro aiuto.Python: regex per catturare i dati
Ho un grande pezzo di dati, che assomiglia a questo:
a
b : c 901
d : e sda
v
w : x ads
any
abc : def 12132
ghi : jkl dasf
mno : pqr fas
stu : vwx utu
Descrizione: file inizia con una riga contenente singola parola (che può iniziare con spazi e spazi bianchi può essere anche dopo la parola), quindi segue la linea di attributi separati da due punti (può avere anche spazi bianchi), quindi una riga di attributi o una riga con una singola parola. Non riesco a creare la regex diritto di prenderlo nella forma:
{
"a": [["b": "c 901"], ["d", "e sda"]],
"v": [["w", "x ads"]],
"any": ["abc", "def 12132"], ["ghi", "jkl dasf"],
# etc.
}
Ecco che cosa ho provato:
regex = str()
regex += "^(?:(?:\\s*)(.*?)(?:\\s*))$",
regex += "(?:(?:^(?:\\s*)(.*?)(?:\\s*):(?:\\s*)(.*?)(?:\\s*))$)*$"
pattern = re.compile(regex, re.S | re.M)
Tuttavia, non trova quello che mi serve. Potresti aiutarmi? So che posso elaborare il file senza regex, usando l'iteratore linea per riga e controllando il simbolo ":", ma il file è troppo grande per elaborarlo in questo modo (se sai come elaborarlo velocemente senza regex, anche questo sarà risposta giusta, ma prima quello che viene in mente è troppo lento).
Grazie in anticipo!
P.S. Nella forma canonica di file ha un aspetto simile a questo:
a
b : c 901
d : e sda
Ogni sezione inizia con una sola parola, quindi seguire la linea attributi (dopo due spazi bianchi), ci attributi sono separati con (":"), quindi Agane attributi linea o linea con una singola parola. Altri spazi bianchi sono proibiti. Probabilmente sarà più facile.
+1 Super chiarezza; Domanda ben incorniciata. – Yavar