【问题标题】:re to find longest matching postfix of two stringsre 查找两个字符串的最长匹配后缀
【发布时间】:2012-09-26 09:49:00
【问题描述】:

我有两个字符串,例如:

a = '54515923333558964'
b = '48596478923333558964'

现在最长的后缀匹配是

c = '923333558964'

使用 re 的解决方案是什么?

这是我找到的前缀匹配解决方案:

import re
pattern = re.compile("(?P<mt>\S*)\S*\s+(?P=mt)")
a = '923333221486456'
b = '923333221486234567'
c = pattern.match(a + ' ' + b).group('mt')

【问题讨论】:

  • 你为什么要使用re
  • @MartijnPieters 没什么特别的 除了循环之外的任何解决方案都可以

标签: python regex string-matching longest-substring


【解决方案1】:

试试difflib.SequenceMatcher

import difflib
a = '54515923333558964'
b = '48596478923333558964'

s = difflib.SequenceMatcher(None, a, b)
m = s.find_longest_match(0, len(a), 0, len(b))
print a[m.a:m.a+m.size]

【讨论】:

  • @eumiro.. 你能解释一下你用过的这个方法吗??
  • @RohitJain 查看链接文档
【解决方案2】:

您可以使用这种正则表达式模式的变体:

\S*?(?P<mt>\S*)\s+\S*(?P=mt)$

编辑。 但是请注意,这可能需要 O(n3) 时间和一些输入。尝试例如

a = 1000 * 'a'
b = 1000 * 'a' + 'b'

在我的系统上处理这需要一秒钟。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 2022-01-19
    • 2020-08-11
    • 2014-06-26
    相关资源
    最近更新 更多