如何实现不考虑顺序的字符串子串存在性判断
解决方案
你的问题出在find()方法只会判断连续的子串,但你的示例里两个字符串是内容相同但顺序、大小写不同的非连续匹配场景。以下是几种最简单的实现方式,按需选择:
场景1:判断两个字符串的单词集合完全一致(忽略大小写、顺序)
把字符串统一转小写,拆成单词集合后比较,完全适配你的示例场景:
str1 = 'Wolverine vs Freddy Krueger' str2 = 'Freddy Krueger Vs Wolverine' set1 = set(str1.lower().split()) set2 = set(str2.lower().split()) print(set1 == set2) # 输出 True
场景2:判断一个字符串的所有单词都在另一个中存在(忽略大小写)
如果允许其中一个字符串包含额外单词,只要核心内容互相覆盖:
str1_words = str1.lower().split() str2_words = str2.lower().split() # 检查str1的所有单词都在str2里 print(all(word in str2_words for word in str1_words)) # 输出 True # 检查str2的所有单词都在str1里 print(all(word in str1_words for word in str2_words)) # 输出 True
补充:仅忽略大小写的连续子串判断
如果你的需求还是严格的连续子串匹配,只是要忽略大小写差异:
# 这种方式在你的示例里会返回False(因为顺序不同),仅适用于单纯大小写差异的连续子串场景 print(str1.lower() in str2.lower())
内容的提问来源于stack exchange,提问作者Anthony Reid
相关产品推荐
相关产品推荐

