如何判断两个字符串是否有共同的字符部分? - Python

时间:2012-03-16 09:23:11

标签: python

有两个字符串:

   str1 = "black_red_yellow"

   str2 = "blue_red_green"

我可以使用哪个python库来检查这两个字符串是否有共同的子串"_red_"?提前谢谢你。

4 个答案:

答案 0 :(得分:4)

如果你不知道你正在搜索的实际字符串

,这样的东西应该有用
import difflib

str1 = "black_red_yellow"
str2 = "blue_red_green"

difference = difflib.SequenceMatcher()

difference.set_seqs(str1, str2)

for match in difference.get_matching_blocks():
    print str1[match[0]:match[0] + match[2]]

答案 1 :(得分:1)

如果你找不到任何其他东西,那至少有这个天真的实现:

str1 = "black_red_yellow"
str2 = "blue_red_green"

if len(str1) < len(str2):
    min_str = str1
    max_str = str2
else:
    min_str = str2
    max_str = str1

matches = []
min_len = len(min_str)
for b in xrange(min_len):
    for e in xrange(min_len, b, -1):
        chunk = min_str[b:e]
        if chunk in max_str:
            matches.append(chunk)

print max(matches, key=len)

打印_red_

答案 2 :(得分:0)

您可以使用difflib以这种方式比较字符串。但是,如果您知道要查找的字符串,则可以执行'_red_' in str1 and '_red_' in str2。如果您不知道字符串,那么您是否寻找特定长度的匹配?例如。会'red'匹配'blue'因为它们都包含'e'吗?检查任何匹配的最短,最简单的方法是

bool([a for a in str1 if a in str2])

修改或者,更有效率,

any(a for a in str1 if a in str2)

答案 3 :(得分:0)

  1. 测试是否存在公共子字符串,包括长度1:

    如果设置(str1).intersection(set(str2)):打印“是的,我们可以!”