字符串中匹配的单词一起出现

时间:2019-06-05 12:29:57

标签: python-3.x

我试图匹配出现在字符串中的单词,而不考虑它们出现的顺序。

我尝试做一些非常基础的事情。它给了我预期的结果,但是我必须匹配用户输入的任意数量的单词。

示例:用户想要匹配“优质产品”

str="great product. affordable useful cool."
if (str.find("great product")) != -1 or (str.find("product great")) != -1:
       print(str)

给出预期结果。 现在,如果用户想检查字符串中是否包含

"useful affordable cool"

,只要它们同时出现就可以按任何顺序。

str 有这些单词,因此必须匹配。

我该怎么做?我应该使用正则表达式吗?

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:4)

如果您想通过单个正则表达式处理此问题,则可以尝试使用以下模式:

^(?=.*\buseful\b)(?=.*\baffordable\b)(?=.*\bcool\b).*$

Python脚本:

input = "great product. affordable useful cool."
match = re.match(r'^(?=.*\buseful\b)(?=.*\baffordable\b)(?=.*\bcool\b).*$', input)
if match:
    print("MATCH")

上面的正则表达式模式使用正数 lookaheads ,每个正则词断言其中一个关键字出现在输入字符串中。例如:

(?=.*\buseful\b)

断言useful出现。这三个先行词的组合涵盖了所有三个关键字。

答案 1 :(得分:2)

使用itertools.permutationsany

例如:

tolook = "useful affordable cool".split()
str_val = "great product. affordable useful cool."
if any(i in str_val for i in [" ".join(comb) for comb in permutations(tolook, len(tolook))]):
    print("Found")
else:
    print("N\A")

#--->Found