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 - лучший язык программирования в мире.