我有两个HTML页面,我想比较它们的源代码。我已经将页面源代码转换为字符串,我需要知道什么是比较两个巨大字符串的最佳方法。
page1.eql?(page2)
str.eql?(str1)
@
我真的很想知道比较的最佳方法。
ocebsuys1#
我不知道你希望你的比较有多详细。如果你想要“类似差分”的功能,你可以查看前面的类似问题:diff a ruby string or array
enxuqcxy2#
这是levenshtein方法,它将打印字符串之间的差异,我不确定这是否是你要找的。否则,我建议只使用page1.eql?(第2页)
def levenshtein(a, b) case when a.empty? then b.length when b.empty? then a.length else [(a[0] == b[0] ? 0 : 1) + levenshtein(a[1..-1], b[1..-1]), 1 + levenshtein(a[1..-1], b), 1 + levenshtein(a, b[1..-1])].min end end
ylamdve63#
查看loofah gem(github link)。它在语义上区分HTML(和XML)子树,这意味着忽略了无意义的空白,忽略了属性的顺序等等。
loofah
0ejtzxu14#
尝试使用http://prettydiff.com/?lang=htmlPretty Diff将删除注解和无意义白色,以进行最准确的比较。它还提供了高级选项,用于微调不同类型的误报条件。
vjhs03f75#
这就是nokogiri-diff gem所做的事情。由于它基于真正的HTML解析器,因此它对无端的差异(例如,布局中的差异)更加健壮。
5条答案
按热度按时间ocebsuys1#
我不知道你希望你的比较有多详细。如果你想要“类似差分”的功能,你可以查看前面的类似问题:diff a ruby string or array
enxuqcxy2#
这是levenshtein方法,它将打印字符串之间的差异,我不确定这是否是你要找的。否则,我建议只使用page1.eql?(第2页)
ylamdve63#
查看
loofah
gem(github link)。它在语义上区分HTML(和XML)子树,这意味着忽略了无意义的空白,忽略了属性的顺序等等。0ejtzxu14#
尝试使用http://prettydiff.com/?lang=html
Pretty Diff将删除注解和无意义白色,以进行最准确的比较。它还提供了高级选项,用于微调不同类型的误报条件。
vjhs03f75#
这就是nokogiri-diff gem所做的事情。由于它基于真正的HTML解析器,因此它对无端的差异(例如,布局中的差异)更加健壮。