正则表达式将匹配string1的最长子串与string2

时间:2013-05-16 15:33:56

标签: python regex substring

我和我有两个字符串a和b。我想要一个正则表达式模式,它将匹配b的最长子串与a的开头。

例如,

a = "aaaabaaa"
b = "aaazb"
answer_i_need = "aaa"

示例2,

a = "aaaabaaa"
b = "aaaa"
answer_i_need = "aaaa"      

示例2,

a = "aaaabaaa"
b = "baaa"
answer_i_need = "" 

我知道找到b的所有子串并检查它是否与a匹配的选项,但是由于字符串非常长并且我使用的是Python,所以它将花费太长时间。 说实话,我不确定是否有可能,无论如何,如果我能找到一个这样的解决方案,我会非常感激。

编辑:在 this question 中OP需要一个优雅的答案,而我正在处理非常长的字符串(近100,000个字符),所以我想知道最有效的答案。

1 个答案:

答案 0 :(得分:1)

我认为你的事情变得复杂了。我喜欢正则表达式,但我发现我们必须尝试将它们用于不适合的任务。

您的问题很容易解决如下:

import re


def longest_common_beginning(a,b):
    i = 0
    for i in xrange(min(len(a),len(b))):
        if a[i]!=b[i]:
            return a[:i]
    else:
        return a[:i+1]

for a,b,ain in (("aaaabaaa","aaazb","aaa"),
                ("aaaabaaa","aaaa", "aaaa"),
                ("aaaabaaa","baaa","")):
    x = longest_common_beginning(a,b)  
    print ('a   : %r\n'
           'b   : %r\n'
           'ain : %r\n'
           'x   : %r   ain==x is %s\n'
           % (a,b,ain,x,ain==x))
a b 中的一个是空字符串的情况需要

i=0