Python difflib: выделение различий внутри?

При сравнении аналогичных строк я хочу выделить различия в одной строке:

a) lorem ipsum dolor sit amet b) lorem foo ipsum dolor amet lorem <ins>foo</ins> ipsum dolor <del>sit</del> amet 

Хотя difflib.HtmlDiff, похоже, делает этот вид встроенного выделения, он производит очень многословную разметку.

К сожалению, я не смог найти другой класс / метод, который не работает по очереди.

Я что-то пропустил? Любые указатели будут оценены!

2 Solutions collect form web for “Python difflib: выделение различий внутри?”

Для вашего простого примера:

 import difflib def show_diff(seqm): """Unify operations between two compared strings seqm is a difflib.SequenceMatcher instance whose a & b are strings""" output= [] for opcode, a0, a1, b0, b1 in seqm.get_opcodes(): if opcode == 'equal': output.append(seqm.a[a0:a1]) elif opcode == 'insert': output.append("<ins>" + seqm.b[b0:b1] + "</ins>") elif opcode == 'delete': output.append("<del>" + seqm.a[a0:a1] + "</del>") elif opcode == 'replace': raise NotImplementedError, "what to do with 'replace' opcode?" else: raise RuntimeError, "unexpected opcode" return ''.join(output) >>> sm= difflib.SequenceMatcher(None, "lorem ipsum dolor sit amet", "lorem foo ipsum dolor amet") >>> show_diff(sm) 'lorem<ins> foo</ins> ipsum dolor <del>sit </del>amet' 

Это работает со строками. Вы должны решить, что делать с кодами «replace».

difflib.SequenceMatcher будет работать на одной линии. Вы можете использовать «коды операций», чтобы определить, как изменить первую строку, чтобы сделать ее второй строкой.

  • Выполняется ли код python в порядке
  • Алгоритм обнаружения похожих документов в скрипте python
  • Алгоритм разницы текста
  • Создание алгоритма Diff / Patch для HTML
  • Разнообразный JSON
  • Сравнить фрагменты XML?
  • Python Difflib - Как получить SDIF-последовательности с «Change» Op
  • Сравните два текстовых файла, чтобы найти различия и вывести их в новый текстовый файл
  •  
    Interesting Posts for Van-Lav

    Пустой набор букв?

    проверьте, существует ли ключ в ведре в s3 с помощью boto3

    Постройте цветовое колесо (полярное) на основе цветовой карты с использованием Python / Matplotlib

    Повторное диалоговое окно с Tkinter и Matplotlib в Mac OS X

    Загрузка большого файла в Python

    Каков самый простой способ конвертировать ndarray в cv :: Mat?

    Как получить аргументы параметров из замороженного дистрибутива spicy.stats?

    Сортировка баллов и названий в алфавитном порядке, в среднем, от наивысшего до самого низкого

    Что такое инверсия date.toordinal () в python?

    Networkx read_gml error "networkx.exception.NetworkXError: не может tokenize u'graph 'в (3, 1)"

    Как сделать углы в полярном графике matplotlib идти по часовой стрелке с 0 ° вверху?

    Если условие для сравнения двух данных в Python

    Добавление поля ManyToManyField к существующей модели

    Рекомендации по взаимодействию perl-to-python?

    config fail nginx настройка для tornadoweb, неизвестная директива "пользователь"

    Python - лучший язык программирования в мире.