Für ein Projekt von mir versuche ich, einen kleinen Teil des BitTorrent-Protokolls zu implementieren, das here gefunden werden kann. Insbesondere möchte ich den "Bencoding" -Teil verwenden, der eine Möglichkeit bietet, Daten für die Übertragung über einen Socket sicher zu verschlüsseln. Das Format ist wie folgt:Wie man einen String einer bestimmten Länge mit einem Regex vergleicht
8:a string => "a string"
i1234e => 1234
l1:a1:be => ['a', 'b']
d1:a1:b3:one3:twoe => {'a':'b', 'one':two}
Der kodierende Teil leicht genug war, aber Decodierung ziemlich lästig werden. Zum Beispiel, wenn ich eine Liste von Strings habe, habe ich keine Möglichkeit, sie in einzelne Strings zu trennen. Ich habe mehrere verschiedene Lösungen ausprobiert, einschließlich PyParsing und einen benutzerdefinierten Token-Parser. Ich versuche gerade, Regexes zu benutzen, und es scheint ziemlich gut zu laufen, aber ich bin immer noch am String Problem hängen. Meine aktuelle Regex ist:
(?P<length>\d+):(?P<contents>.{\1})
Allerdings kann ich nicht scheinen, die erste Gruppe als die Länge der zweiten Gruppe zu verwenden. Gibt es einen guten Weg, dies zu tun? Oder gehe ich das alles falsch an, und die Antwort sitzt direkt vor mir?
Nicht die Antwort sicher, aber die ursprüngliche Bit Torrent-Client ist Open Source. Und es ist sogar in Python! So könntest du versuchen, herumzustochern: http://bittorrent.cvs.sourceforge.net/viewvc/bittorrent/BitTorrent/ – MatrixFrog
"Und jetzt hast du zwei Probleme!" :: rimshot :: –
Danke für den Link, MatrixFrog. Ich denke, dass ich diese Datei nur importieren und die ursprüngliche Implementierung in meinem Programm verwenden werde. –