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

2024-10-08 23:27:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我带了两条线a和b。我想要一个正则表达式模式,这样它就可以将b的最长可能的子字符串与a从a的开头开始匹配

例如

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

例2

^{pr2}$

例2

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

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

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


Tags: 字符串答案answer选项时间模式need老实
1条回答
网友
1楼 · 发布于 2024-10-08 23:27:06

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

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

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

如果ab之一是空字符串,则需要i=0。在

相关问题 更多 >

    热门问题