В python создайте HTML, выделяющий различия двух простых строк - PullRequest
5 голосов
/ 22 февраля 2012

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

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

... должен вернуть строку:

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

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

1 Ответ

8 голосов
/ 22 февраля 2012

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

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

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

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

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

Нет никаких упоминаний о том, что difflib каким-либо образом устарел или устарел в документах .

...