2012-02-22 2 views
5

Мне нужно выделить различия между двумя простыми строками с помощью python, включая различные подстроки в атрибуте span HTML. Поэтому я ищу простой способ реализации функции иллюстрируется следующим примером:В python создайте HTML, выделяя различия двух простых строк.

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

... она должна возвращать строку:

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

Я гугле и видел упомянутый difflib, но он должен быть устаревшим, и я не нашел хорошей простой демонстрации.

+0

Если разница найдена, должна ли она всегда показывать подстроку второй строки (в вашем примере: '' XX'')? Вы просто ищете позиционные различия? это означает 's1 [0]' с 's2 [0]', 's1 [1]' с 's2 [1]' и т. д. – juliomalegria

+0

Это похоже на вопрос, который был дан [здесь] (http: /stackoverflow.com/questions/1576459/generate-pretty-diff-html-in-python) –

+0

@ julio.alegria Ну, я заинтересован в том, чтобы выделить и другую часть первой строки, а 'll' в моем примере. Действительно, я ищу позиционные различия. – user1069609

ответ

7

Все, что вам нужно выходит из difflib - например:

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

Каждый элемент в этом списке символ из двух ваших входных строк, с префиксом одного из

  • " " (2 пробела), символ, присутствующий в этом положении в обеих строках
  • "- " (штриховое пространство), символ, присутствующий в этом положении в первой строке
  • "+ " (плюс пространство), символ присутствует в этом положении во второй строке.

Итерации по этому списку, и вы можете точно построить результат, который хотите создать.

Нет упоминания о том, что difflib в любом случае устарел или устарел в docs.

+0

Спасибо, это именно то, что мне нужно! У меня возникла идея, что difflib должен быть устаревшим из книги «Python Essential Reference 4th ed.». D. M. Beazley 2009, стр. 586: «Обработка строк. Следующие модули представляют собой несколько старых, теперь устаревших модулей, используемых для обработки строк ... difflib, fpformat, stringprep, textwrap" – user1069609

Смежные вопросы