Dans Python, produire du HTML mettant en évidence les différences de deux cordes simples
Question
J'ai besoin de mettre en évidence les différences entre deux chaînes simples avec Python, en entourant les sous-chaînes différentes dans un attribut HTML Span. Je cherche donc un moyen simple d'implémenter la fonction illustrée par l'exemple suivant:
hightlight_diff('Hello world','HeXXo world','red')
... il doit renvoyer la chaîne:
'He<span style="color:red">XX</span>o world'
J'ai googlé et vu DiffBlib mentionné, mais il est censé être obsolète et je n'ai trouvé aucune bonne démo simple.
La solution
Tout ce dont vous avez besoin sort de diffib - par exemple:
>>> import difflib
>>> d = difflib.Differ()
>>> l = list(d.compare("hello", "heXXo"))
>>> l
[' h', ' e', '- l', '- l', '+ X', '+ X', ' o']
Chaque élément de cette liste est un caractère de vos deux chaînes d'entrée, préfixé avec l'un des
" "
(2 espaces), caractère présent à cette position dans les deux cordes"- "
(espace de tableau de bord), caractère présent à cette position dans la première chaîne"+ "
(plus de l'espace), caractère présent à cette position dans la deuxième chaîne.
Itérer dans cette liste et vous pouvez créer exactement la sortie que vous cherchez à créer.
Il n'y a aucune mention de diffib en aucune façon obsolète ou déprécié dans le docs.