Para un proyecto mío, estoy tratando de implementar una pequeña parte del protocolo BitTorrent, que se puede encontrar en here. Específicamente, quiero usar la parte de "Bencode", que es una forma de codificar de forma segura los datos para transferirlos a través de un socket. El formato es el siguiente:Cómo hacer coincidir una cadena de cierta longitud con una expresión regular
8:a string => "a string"
i1234e => 1234
l1:a1:be => ['a', 'b']
d1:a1:b3:one3:twoe => {'a':'b', 'one':two}
la parte de codificación fue bastante fácil, pero la decodificación se convierta en una molestia. Por ejemplo, si tengo una lista de cadenas, no tengo manera de separarlas en cadenas individuales. He intentado varias soluciones diferentes, incluyendo PyParsing y un analizador de tokens personalizado. Actualmente estoy tratando de usar expresiones regulares, y parece estar yendo bastante bien, pero todavía estoy pendiente del problema de la secuencia. Mi expresión regular actual es:
(?P<length>\d+):(?P<contents>.{\1})
Sin embargo, me parece que no puede utilizar el primer grupo que la longitud del segundo grupo. ¿Hay alguna buena manera de hacer esto? ¿O me estoy equivocando y la respuesta está frente a mí?
No está seguro de la respuesta, pero el cliente Torrent de bits original es de código abierto. ¡Y está incluso en Python! Así que podrías probar hurgando: http://bittorrent.cvs.sourceforge.net/viewvc/bittorrent/BitTorrent/ – MatrixFrog
"¡Y ahora tienes dos problemas!" :: rimshot :: –
Gracias por el enlace, MatrixFrog. Creo que voy a importar ese archivo y usar la implementación original en mi programa. –