1

我有两个字符串 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,这将花费太长时间。老实说,我不确定这是否可能,无论如何,如果我能找到这样的解决方案,我将非常感激。

编辑:在这个问题中,OP 需要一个优雅的答案,而我正在处理很长的字符串(几乎 100,000 个字符),所以我想知道最有效的答案。

4

1 回答 1

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))

i=0在ab之一是空字符串的情况下需要。

于 2013-05-16T16:33:11.013 回答