有没有一种pythonic方法来计算两个字符串中前导匹配字符的数量?

时间:2019-06-14 11:54:14

标签: regex python-3.x string-matching string-length

对于两个给定的字符串,是否有一种pythonic方法来计算两个字符串(从字符串的位置0开始)连续多少个相同字符?

例如,在aaa_Helloaa_World中,“前导匹配字符”为aa,长度为2。在anotherexample中有没有前导匹配字符,长度为0。


我已经编写了一个函数来实现这一点,该函数使用了for循环,因此对我来说似乎非常不切实际:

def matchlen(string0, string1): # Note: does not work if a string is ''

    for counter in range(min(len(string0), len(string1))):
        # run until there is a mismatch between the characters in the strings
        if string0[counter] != string1[counter]:         
            # in this case the function terminates
            return(counter)

    return(counter+1)

matchlen(string0='aaa_Hello', string1='aa_World') # returns 2
matchlen(string0='another', string1='example') # returns 0

2 个答案:

答案 0 :(得分:2)

您可以使用zipenumerate

def matchlen(str1, str2):
    i = -1 # needed if you don't enter the loop (an empty string)
    for i, (char1, char2) in enumerate(zip(str1, str2)):
        if char1 != char2:
            return i
    return i+1

答案 1 :(得分:1)

from itertools import takewhile
common_prefix_length = sum(
    1 for _ in takewhile(lambda x: x[0]==x[1], zip(string0, string1)))

zip将配对两个字符串中的字母;只要它们相等,takewhile就会产生它们;和sum将看到有多少。

正如泡泡所言,这确实与您的loop回事完全一样。它唯一的优点(也是唯一的缺点)是它是单线的。随你便吧。