2012-02-22 14 views
5

Tôi cần làm nổi bật sự khác biệt giữa hai chuỗi đơn giản với python, bao quanh các phần tử khác nhau trong thuộc tính span HTML. Vì vậy, tôi đang tìm một cách đơn giản để thực hiện các chức năng minh họa bằng các ví dụ sau:Trong python, tạo HTML làm nổi bật sự khác biệt của hai chuỗi đơn giản

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

... nó sẽ trả về chuỗi:

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

Tôi có googled và thấy difflib được đề cập, nhưng nó được cho là đã lỗi thời và tôi đã không tìm thấy bất kỳ bản demo đơn giản nào.

+0

nếu tìm thấy sự khác biệt, nó có luôn hiển thị chuỗi con của chuỗi thứ hai (trong ví dụ của bạn: ''XX'') không? Bạn chỉ đang tìm kiếm sự khác biệt về vị trí đúng không? điều này có nghĩa là 's1 [0]' với 's2 [0]', 's1 [1]' với 's2 [1]' và vv .. – juliomalegria

+0

Điều này tương tự như câu hỏi được trả lời [Ở đây] (http://stackoverflow.com/questions/1576459/generate-pretty-diff-html-in-python) –

+0

@ julio.alegria Vâng, tôi quan tâm đến việc làm nổi bật phần khác nhau của chuỗi đầu tiên, 'll' trong ví dụ của tôi. Thật vậy, tôi đang tìm kiếm sự khác biệt về vị trí. – user1069609

Trả lời

7

Tất cả mọi thứ mà bạn cần phải đi ra khỏi difflib - ví dụ:

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

Mỗi phần tử trong danh sách đó là một nhân vật từ hai chuỗi đầu vào của bạn, bắt đầu bằng một trong

  • " " (2 dấu cách), ký tự có mặt tại vị trí đó trong cả hai chuỗi
  • "- " (dấu gạch ngang), ký tự có mặt tại vị trí đó trong chuỗi đầu tiên
  • "+ " (cộng với dấu cách), ký tự có mặt tại vị trí đó trong chuỗi thứ hai.

Lặp lại danh sách đó và bạn có thể tạo chính xác đầu ra bạn đang tìm kiếm để tạo.

Không có đề cập đến difflib đang ở bất kỳ cách nào lỗi thời hoặc không được chấp nhận trong docs.

+0

Cảm ơn, đây chính xác là điều tôi cần! Tôi đã có ý tưởng rằng difflib nên lỗi thời từ cuốn sách "Python Essential Reference 4th ed." bởi D. M. Beazley 2009, trang 586: "Chuỗi xử lý. Các mô-đun sau đây là một số cũ hơn, bây giờ đã lỗi thời, mô-đun được sử dụng để xử lý chuỗi ... difflib, fpformat, stringprep, textwrap" – user1069609