2012-02-22 7 views
5

Chcę podkreślić różnice między dwoma prostymi łańcuchami z pythonem, obejmując różne podciągi w atrybucie zakresu HTML. Więc szukam prosty sposób realizacji funkcji ilustruje poniższy przykład:W pythonie, wytworzymy HTML podświetlając różnice dwóch prostych łańcuchów.

hightlight_diff('Hello world','HeXXo world','red')

... powinien wrócić ciągu:

'He<span style="color:red">XX</span>o world'

Mam google i Widziałem wspomniane difflib, ale powinno być przestarzałe i nie znalazłem dobrego prostego demo.

+0

jeśli zostanie znaleziona różnica, czy powinna zawsze zawierać podciąg drugiego ciągu znaków (w twoim przykładzie: 'XX ')? Po prostu szukasz różnic pozycyjnych, prawda? oznacza to, 's1 [0]' z 's2 [0]', 's1 [1]' z 's2 [1]' i tak dalej .. – juliomalegria

+0

Jest to podobne do odpowiedzi na pytanie [tutaj] (http: // /stackoverflow.com/questions/1576459/generate-pretty-diff-html-in-python) –

+0

@ julio.alegria Cóż, jestem zainteresowany podkreśleniem różnych części pierwszego ciągu znaków, "ll" w moim przykładzie. Rzeczywiście szukam różnic pozycyjnych. – user1069609

Odpowiedz

7

Wszystko, co trzeba wychodzi difflib - na przykład:

>>> import difflib 
>>> d = difflib.Differ() 
>>> l = list(d.compare("hello", "heXXo")) 
>>> l 
[' h', ' e', '- l', '- l', '+ X', '+ X', ' o'] 

Każdy element tej listy to postać z twoich dwóch ciągów wejściowych, poprzedzona jednym

  • " " (2 spacje), znak obecny w tej pozycji w obu strunach:
  • "- " (obszar dash), znak obecny na tej pozycji w pierwszym ciągu znaków
  • "+ " (plus spacja), znak obecny na tej pozycji w drugim ciągu znaków.

Powtórz tę listę i możesz zbudować dokładnie takie wyjście, jakie chcesz utworzyć.

Nie ma wzmianki o tym, że difflib jest w jakikolwiek sposób przestarzały lub przestarzały w docs.

+0

Dzięki, to jest dokładnie to, czego potrzebowałem! Miałem pomysł, że difflib powinien być przestarzały z książki "Python Essential Reference 4th ed." D. M. Beazley 2009, strona 586: "Przetwarzanie ciągów.Następujące moduły to niektóre starsze, teraz przestarzałe moduły używane do przetwarzania ciągów znaków ... difflib, fpformat, stringprep, textwrap" – user1069609

Powiązane problemy