我和我有两个字符串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个字符),所以我想知道最有效的答案。
答案 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
。