En python, produce HTML resaltando las diferencias de dos cadenas simples
Pregunta
Necesito resaltar las diferencias entre dos cadenas simples con python, encerrando las diferentes subcadenas en un atributo de intervalo HTML.Así que estoy buscando una forma sencilla de implementar la función ilustrada en el siguiente ejemplo:
hightlight_diff('Hello world','HeXXo world','red')
... debería devolver la cadena:
'He<span style="color:red">XX</span>o world'
Busqué en Google y vi que se mencionaba difflib, pero se supone que es obsoleto y no he encontrado ninguna demostración simple y buena.
Solución
Todo lo que necesita proviene de difflib, por ejemplo:
>>> import difflib
>>> d = difflib.Differ()
>>> l = list(d.compare("hello", "heXXo"))
>>> l
[' h', ' e', '- l', '- l', '+ X', '+ X', ' o']
Cada elemento de esa lista es un carácter de sus dos cadenas de entrada, con el prefijo de
-
" "
(2 espacios), carácter presente en esa posición en ambas cadenas -
"- "
(espacio de guión), carácter presente en esa posición en la primera cadena -
"+ "
(más espacio), carácter presente en esa posición en la segunda cadena.
Repita esa lista y podrá generar exactamente el resultado que desea crear.
No se menciona que difflib esté obsoleto o en desuso en los documentos .