Per un mio progetto, sto cercando di implementare una piccola parte del protocollo BitTorrent, che può essere trovato here. In particolare, voglio utilizzare la parte "Bencoding" di esso, che è un modo per codificare in modo sicuro i dati per il trasferimento su un socket. Il formato è il seguente:Come abbinare una stringa di una certa lunghezza con una regex
parte8:a string => "a string"
i1234e => 1234
l1:a1:be => ['a', 'b']
d1:a1:b3:one3:twoe => {'a':'b', 'one':two}
La codifica è stato abbastanza facile, ma la decodifica è diventato piuttosto una seccatura. Ad esempio, se ho una lista di stringhe, non ho modo di separarle in stringhe individuali. Ho provato diverse soluzioni, tra cui PyParsing e un parser di token personalizzato. Attualmente sto tentando di usare espressioni regex e sembra che stia andando abbastanza bene, ma sono ancora bloccato dal problema delle stringhe. La mia espressione regolare è:
(?P<length>\d+):(?P<contents>.{\1})
Tuttavia, non riesco a utilizzare il primo gruppo come la lunghezza del secondo gruppo. C'è un buon modo per farlo? O mi sto avvicinando a questo tutto sbagliato, e la risposta è seduta proprio di fronte a me?
Non sono sicuro della risposta, ma la punta originale client Torrent è open source. Ed è anche in Python! Quindi potresti provare a dare un'occhiata: http://bittorrent.cvs.sourceforge.net/viewvc/bittorrent/BitTorrent/ – MatrixFrog
"E ora hai due problemi!" :: rimshot :: –
Grazie per il collegamento, MatrixFrog. Penso che sto per importare quel file e utilizzare l'implementazione originale nel mio programma. –