在Python中匹配字符串?

2024-09-28 13:28:56 发布

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

使用Python,如何检查一个字符串(a)中的3个连续字符是否也包含在另一个字符串(B)中?Python中有内置函数吗?在

示例:

A = FatRadio
B = fradio

假设在python中有一个连续的字符,在这个例子中,有一个连续的字符,在这个例子中,有一个连续的字符,在这个例子中,有一个连续的字符,在这个例子中,有一个连续的字符,在这个例子中,有一个连续的字符,在这个例子中,有一个连续的字符。在


Tags: 函数字符串示例字符内置例子fatradiofradio
3条回答

这个怎么样?在

char_count = 3 # Or whatever you want
if len(A) >= char_count and len(B) >= char_count :
    for i in range(0, len(A) - char_count + 1):
        some_chars = A[i:i+char_count]
        if some_chars in B:
            # Huray!

我不知道有什么内置函数,所以我想最简单的实现应该是这样的:

a = 'abcdefgh'
b = 'foofoofooabcfoo'

for i in range(0,len(a)-3):
  if a[i:i+3] in b:
    print 'then true!'

可以缩短为:

^{pr2}$

您可以使用^{}模块:

import difflib

def have_common_triplet(a, b):
    matcher = difflib.SequenceMatcher(None, a, b)
    return max(size for _,_,size in matcher.get_matching_blocks()) >= 3

结果:

^{pr2}$

但是请注意,SequenceMatcher比找到第一个公共的三元组要多得多,因此它可能比一个幼稚的方法花费更多的时间。更简单的解决方案是:

def have_common_group(a, b, size=3):
     first_indeces = range(len(a) - len(a) % size)
     second_indeces = range(len(b) - len(b) % size)
     seqs = {b[i:i+size] for i in second_indeces}
     return any(a[i:i+size] in seqs for i in first_indeces)

它的性能应该更好,尤其是当匹配在字符串的开头时。在

相关问题 更多 >

    热门问题