如何将数组中的多个单词(每个字符串)与包含多个单词的字符串进行匹配

时间:2017-09-18 01:11:51

标签: python arrays string python-3.x match

这已经解决了。有关解决方案,请参阅本文的底部

我试图过滤掉一个连续的循环,该循环具有来自API的常量字符串馈送。

以下是我使用的代码示例 -

我有一个像这样的数组的过滤器设置:

filter_a = ['apples and oranges', 'a test', 'bananas']

我在Stackoverflow上找到的一个函数,如下所示:

def words_in_string(word_list, a_string):
    return set(word_list).intersection(a_string.split())
title = 'bananas'
#(this is a continuously looping thing, so sometimes it 
# might be for example 'apples and oranges')

我的if声明:

if words_in_string(filter_a, str(title.lower())):
    print(title.lower())

出于某种原因,它会检测到香蕉'但不是苹果和橘子'。它将跳过具有多个单词的字符串。我因为分裂()而猜测它,但我不确定。

修改 这是我的意思的另一个例子:

匹配并成功:

title = 'this is 1'

word_list = ['this is','a test']

if title in word_list:
    print("successful")
else:
    print("unsuccessful")

编辑2:

解决方案

title ='这是1'

word_list = ['这是','测试']

如果有的话(word_list中项目的标题中的项目):     打印("成功&#34) 其他:     打印("不成功&#34)

1 个答案:

答案 0 :(得分:0)

我认为你的代码没有意义。让我们分析一下words_in_string做了什么。

word_list表示您要保留的单词列表,set(word_list)将此列表转换为仅包含唯一元素的集合。在您的示例中,将['apples and oranges', 'a test', 'bannanas']转换为集合{'apples and oranges', 'a test', 'bannanas'}

接下来,a_string.split()a_string拆分为一个列表,然后调用set的函数intersection以获取集合与a_string.split()创建的集合的交集。

最后,返回结果。

为了更清楚,给定一个单词列表,如果这些单词也包含在列表中,此函数将返回a_string中的单词。

例如:

给定["banana", "apple", "orange"]a_string = "I like banana and apple"。它将返回{"banana", "apple"}

但如果您将列表更改为["bananas", "apple", "orange"],则只会返回{"apple"},因为banana不等于bananas