Pour un de mes projets, j'essaye d'implémenter une petite partie du protocole BitTorrent, qui peut être trouvé here. Plus précisément, je veux utiliser la partie "Bencoding", qui est un moyen de coder en toute sécurité des données pour un transfert sur une socket. Le format est le suivant:Comment faire correspondre une chaîne d'une certaine longueur avec une expression régulière
8:a string => "a string"
i1234e => 1234
l1:a1:be => ['a', 'b']
d1:a1:b3:one3:twoe => {'a':'b', 'one':two}
La partie de codage était assez facile, mais le décodage est devenu un problème. Par exemple, si j'ai une liste de chaînes, je n'ai aucun moyen de les séparer en chaînes individuelles. J'ai essayé plusieurs solutions différentes, y compris PyParsing et un analyseur de jeton personnalisé. J'essaie actuellement d'utiliser des regex, et ça semble aller plutôt bien, mais je suis toujours accroché au problème des cordes. Mon regex actuel est:
(?P<length>\d+):(?P<contents>.{\1})
Cependant, je ne peux pas sembler utiliser le premier groupe comme la longueur du deuxième groupe. Y a-t-il un bon moyen de le faire? Ou est-ce que je m'approche de tout cela, et la réponse est assise juste en face de moi?
Pas sûr de la réponse, mais le client Bit Torrent d'origine est open source. Et c'est même en Python! Donc, vous pourriez essayer de fouiner autour: http://bittorrent.cvs.sourceforge.net/viewvc/bittorrent/BitTorrent/ – MatrixFrog
"Et maintenant vous avez deux problèmes!" :: rimshot :: –
Merci pour le lien, MatrixFrog. Je pense que je vais juste importer ce fichier, et utiliser l'implémentation d'origine dans mon programme. –