2012-02-22 7 views
5

Ho bisogno di evidenziare le differenze tra due semplici stringhe con python, racchiudendo le sottostringhe differenti in un attributo span HTML. Quindi sto cercando un modo semplice per implementare la funzione illustrata dal seguente esempio:In python, produrre HTML evidenziando le differenze di due stringhe semplici

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

... deve restituire la stringa:

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

Googled e visto difflib menzionato, ma dovrebbe essere obsoleto e non ho trovato nessuna buona demo semplice.

+0

se viene rilevata una differenza, dovrebbe sempre mostrare la sottostringa della seconda stringa (nell'esempio: ''XX'')? Stai solo cercando delle differenze posizionali, giusto? questo significa, 's1 [0]' con 's2 [0]', 's1 [1]' con 's2 [1]' e così via .. – juliomalegria

+0

Questo è simile alla domanda risposta [qui] (http://stackoverflow.com/questions/1576459/generate-pretty-diff-html-in-python) –

+0

@ julio.alegria Bene, mi interessa evidenziare anche la parte differente della prima stringa, "ll" nel mio esempio. In effetti sto cercando diff di posizione. – user1069609

risposta

7

Tutto ciò che è necessario esce difflib - ad esempio:

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

Ogni elemento in tale elenco è un personaggio dai due stringhe di input, preceduto da uno dei

  • " " (2 spazi), carattere presente in quella posizione in entrambe le stringhe
  • "- " (trattino), carattere presente in quella posizione nella prima stringa
  • "+ " (più spazio), carattere presente in quella posizione nella seconda stringa.

Scorri l'elenco e puoi creare esattamente l'output che stai cercando di creare.

Non si fa menzione di difflib che è in alcun modo obsoleto o deprecato nello docs.

+0

Grazie, questo è esattamente il tipo di cosa di cui avevo bisogno! Ho avuto l'idea che difflib dovrebbe essere obsoleto dal libro "Python Essential Reference 4th ed." di D. M. Beazley 2009, pagina 586: "Elaborazione di stringhe I seguenti moduli sono alcuni vecchi, ora obsoleti, moduli usati per l'elaborazione di stringhe ... difflib, fpformat, stringprep, textwrap" – user1069609

Problemi correlati