时间:2010-07-26 14:19:39

标签: regex string diff

5 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

答案 2 :(得分:0)

答案 3 :(得分:0)

Python std lib包含一个diff模块difflib。这是你的问题:

>>> import difflib
>>> f1 = "111xxx222"
>>> f2 = "111yyy222"
>>> sm = difflib.SequenceMatcher(a=f1, b=f2)
>>> diff_re = ''
>>> for a,b,n in sm.get_matching_blocks():
...   if not n: continue
...   if diff_re: diff_re += "(.*)"
...   diff_re += f1[a:a+n]
...
>>> print diff_re
'111(.*)222'

答案 4 :(得分:0)

我认为这是一个非常有趣的问题,特别是如果将其推广为“给定N个字符串,找到最匹配的最简单,最具限制性的正则表达式R”。在给出的测试数据中,这可能会产生无用的答案,如“111(xxx | yyy)222”,因此可能需要对问题进行微调。

这听起来像是一个纯粹的compsci问题,应该有一篇关于它的论文......