我试图匹配出现在字符串中的单词,而不考虑它们出现的顺序。
我尝试做一些非常基础的事情。它给了我预期的结果,但是我必须匹配用户输入的任意数量的单词。
示例:用户想要匹配“优质产品”
str="great product. affordable useful cool."
if (str.find("great product")) != -1 or (str.find("product great")) != -1:
print(str)
给出预期结果。 现在,如果用户想检查字符串中是否包含
"useful affordable cool"
,只要它们同时出现就可以按任何顺序。
str 有这些单词,因此必须匹配。
我该怎么做?我应该使用正则表达式吗?
任何帮助将不胜感激。谢谢!
答案 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.permutations
和any
例如:
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