Python 从字符串中的单词列表中查找第一个匹配项

Python 从字符串中的单词列表中查找第一个匹配项,python,Python,我正在编写一个函数,该函数在字符串中查找关键字并返回第一个匹配项(如果有) 关键词是“什么”、“什么时候”、“谁” 示例: 用户以问题的形式输入字符串: “谁是约翰·康纳” 函数返回“who” 有没有办法将关键字列表与字符串输入进行比较并返回第一个匹配项 我曾想过使用re.search,但每次只需要一个字符串。 这就是我到目前为止所做的: question = input("Ask me a question: ") keywords = ("what", "when", "who")

我正在编写一个函数,该函数在字符串中查找关键字并返回第一个匹配项(如果有)

关键词是“什么”、“什么时候”、“谁”

示例:

  • 用户以问题的形式输入字符串: “谁是约翰·康纳”
  • 函数返回“who”
有没有办法将关键字列表与字符串输入进行比较并返回第一个匹配项

我曾想过使用re.search,但每次只需要一个字符串。 这就是我到目前为止所做的:

question = input("Ask me a question: ")
 keywords = ("what", "when", "who")
 question = question.lower()
 match = re.search(r'word:', question) #  re.search seems to take only one string at a time

将输入拆分为单词,并将每个单词与您的关键词集进行比较;如果找到匹配项,则中断循环;如果要将其包装到函数中,则返回

for word in question.split():
    if word in keywords:
        match = word
        break

此外,当没有找到匹配项时,要注意处理案例。

将输入拆分为单词,并将每个单词与您的关键字集进行比较;如果找到匹配项,则中断循环;如果要将其包装到函数中,则返回

for word in question.split():
    if word in keywords:
        match = word
        break

此外,当没有找到匹配项时,要小心处理。

测试一个单词是否包含在一组关键字中是
O(1)
O(n)
测试一组
n
关键字

def find_match(sentence, keyword_set):
    for word in sentence.split():
        if word in keyword_set:
            return word

keywords = {"what", "when", "who"}
question = "Who is John Connor".lower()
>>> find_match(question, keywords)
'who'

测试一个单词是否包含在一组关键字中是
O(1)
vs.
O(n)
测试
n
关键字列表

def find_match(sentence, keyword_set):
    for word in sentence.split():
        if word in keyword_set:
            return word

keywords = {"what", "when", "who"}
question = "Who is John Connor".lower()
>>> find_match(question, keywords)
'who'

将列表转换为格式为
\b(?:what | when | who)\b
的正则表达式,然后使用
re.search()


\b
匹配单词边界,因此只匹配整个单词。

将列表转换为
\b(?:what | when | who)\b
格式的正则表达式,然后使用
重新搜索()


\b
匹配单词边界,因此这将只匹配整个单词。

这将找到列表中的第一个单词,并给出它的位置:

question = input("Ask me a question: ")
keywords = ("what", "when", "who")
question = question.lower()

for keyword in keywords:
   loc = question.find(keyword)
   if loc == -1:
      loc = "Not Found"
   else:
       print('{} was found at location: {} and is the first match found in the list of keywords'.format(keyword, loc))
       break

这将找到列表中的第一个单词,并给出它的位置:

question = input("Ask me a question: ")
keywords = ("what", "when", "who")
question = question.lower()

for keyword in keywords:
   loc = question.find(keyword)
   if loc == -1:
      loc = "Not Found"
   else:
       print('{} was found at location: {} and is the first match found in the list of keywords'.format(keyword, loc))
       break