当前位置: 首页 > 面试题库 >

Python difflib:内联突出显示差异?

淳于恺
2023-03-14
问题内容

比较相似的行时,我要强调同一行的区别:

a) lorem ipsum dolor sit amet
b) lorem foo ipsum dolor amet

lorem <ins>foo</ins> ipsum dolor <del>sit</del> amet

尽管difflib.HtmlDiff似乎进行了这种内联突出显示,但它会产生非常冗长的标记。

不幸的是,我无法找到另一种不能逐行运行的类/方法

我有什么想念的吗?任何指针将不胜感激!


问题答案:

对于您的简单示例:

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'

这适用于字符串。您应该决定如何处理“替换”操作码。



 类似资料:
  • 问题内容: 我注意到人们在1:1的比较中涵盖了某些显示属性的细节,但是在说明差异时还没有涉及很多。可能有人解释各种inline-之间的差异 的东西 显示标签? 对w3schools之类的地方进行更详细的定义会产生奇迹。 问题答案: 对于任何具有块和内联变体的显示类型,唯一的区别是,该显示类型具有以内联方式放置的框(即,[以内联格式设置的上下文),而另一种具有格式化为块级框的框,这取决于大多数情况。

  • 本文向大家介绍HTML 突出显示,包括了HTML 突出显示的使用技巧和注意事项,需要的朋友参考一下 示例 该<mark>元素是HTML5中的新元素,用于“由于其在另一个上下文中的相关性”而标记或突出显示文档中的文本。1 最常见的示例是用户输入搜索查询并显示结果以突出显示所需查询的搜索结果。 输出: 常见的标准格式是黄色背景上的黑色文本,但是可以使用CSS进行更改。

  • 问题内容: 我正在创建一个使用链接(JButton扩展名)的帮助系统,该链接可以展开和折叠带有JLabel的子面板。链接和可折叠面板都可以,但是我在实现查找对话框时遇到了麻烦。我希望能够突出显示用户搜索的部分文本。我认为我使用文本属性为链接中的文本加下划线使我无法突出显示文本的某些部分,但是我不确定如何做不同的事情。这是我的链接子类的链接类的代码: 如何在链接中实现突出显示的文本而又不去除下划线?

  • 问题内容: 我试图突出显示两个数据框之间到底发生了什么变化。 假设我有两个Python Pandas数据框: 我的目标是输出一个HTML表: 标识已更改的行(可以是int,float,boolean,string) 输出具有相同,OLD和NEW值的行(理想情况下,将其输出到HTML表中),以便使用者可以清楚地看到两个数据框之间的变化: id Name score isEnrolled Commen

  • 我正在构建一个swing应用程序,它将在左边有一个项目列表,在右边有一个表。右侧显示的表数取决于左侧选择的项。我希望能够“突出显示”(setBackground)显示所有表中相同的所有行。 我读过关于重写prepareRenderer或GetTableCellRendererComponent的文章。然后,条件呈现逻辑位于重写的方法中。 DefaultTableCellRenderer GetTa

  • 问题内容: 我想了解当CSS是CSS元素的DOM子元素(因此block元素是inline元素的子元素)时会发生什么情况。 CSS 2.1规范的“ 匿名块框”部分描述了这种情况:该示例包括以下规则… …以及随附的文字说… BODY元素包含一个匿名文本块(C1),然后是一个块级元素,然后是另一个匿名文本块(C2)。结果框将是围绕BODY的匿名阻止框,其中包含C1周围的匿名阻止框,P阻止框和C2周围包含