如何匹配一个字符串,中间有任意词,并将其存储为变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何匹配一个字符串,中间有任意词,并将其存储为变量?相关的知识,希望对你有一定的参考价值。

我想做一个机器人,当我问 "what does "+任意词+"mean "时,它就会定义一个词。

我不知道如何将一个输入与一个中间有任何单词的字符串相匹配,然后将这个单词存储为一个变量。

应该是这样的。

whatDoesWordMean = ["what does mean"]

sentance = input()

if any(x in sentance for x in whatDoesWordMean):
    #Stores word as a variable
    #DefineWord()

现在,它只接受输入 "什么意思"

答案

我建议使用正则表达式。

比如说

import re

expressions = [r"what does (\w+) mean", r"meaning of (\w+)", r"what is (\w+)"]
patterns    = [re.compile(expr, re.IGNORECASE) for expr in expressions]

while True:
    sentence = input("chat: ")
    pattern  = next((p for p in patterns if p.match(sentence)),None)
    if pattern:
        word = pattern.match(sentence).group(1)
        print(word,"means...")

output:

chat: what is good
good means...
chat: what does IHMO mean
IHMO means...
chat: hello world
chat: meaning of Life
Life means...
chat: 

如果你不想使用正则表达式,你可以使用前缀后缀匹配的方法,使用字符串方法artswith()和 endswith()。

expressions = ["what does | mean", "meaning of |", "what is |"]
patterns    = [(prefix,suffix) for e in expressions
               for prefix,suffix in [e.lower().split("|")]]

while True:
    sentence = input("chat: ")
    matches  = [ sentence[len(p):-len(s) or None] for p,s in patterns
                 if  sentence.lower().startswith(p) 
                 and sentence.lower().endswith(s)]  
    if matches:
        word = matches[0]
        print(word,"means...")
另一答案

一个快速的解决方案不仅能找到单词,还能找到短语,它是这样的。

import re

msg = 'what does SO mean'
wordRegex = re.compile(r'what does (.*) mean')
print(wordRegex.findall(msg))

基本上,你要找的是所有介于 what doesmean. 通过使用正则表达式,它真的很简单。

另一答案

如果我对你的机器人理解正确的话,它将定义 "什么是 "和 "意味着 "之间的任何东西。 我能想到的一个解决方案是。

whatDoesWordMean = ['what','does','mean']

word_to_define = input()

split_input = word_to_define.split(' ')
definition = None
for word in split_input:
    if word not in whatDoesWordMean:
       definition = DefineWord(word)
       break

当然,这是在你只想定义一个词的前提下。 否则你可以将定义附加到一个列表中,或者做如下操作

whatDoesWordMean = ['what','does','mean']

word_to_define = input()

split_input = word_to_define.split(' ')
to_define = ''
for word in split_input:
    if word not in whatDoesWordMean:
       to_define += word
definition = DefineWord(to_define)

另一答案

我们可以做这样的事情,一目了然。

whatDoesWordMean = ["what", "does", "mean"]

sentence = input()

word_list = [x for x in sentence.split(" ") if x not in whatDoesWordMean]

这将给你一个介于... 'what does ''mean' 并将其存储在变量 word. 你可以使用pyhtons内置的多个单词连接。join() 方法。

word = " ".join(word_list)

但我建议使用正则表达式解决方案,它们的效率更高。

以上是关于如何匹配一个字符串,中间有任意词,并将其存储为变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何拆分字符串并将其存储在临时变量中[重复]

如何匹配一个函数声明?

如何创建一个变量并将其存储为 50 个观察值(python)?

如何计算字符串并将其存储在变量中? [复制]

如何从另一个网页获取值并将其存储为变量?

如何从存储过程中获取 SQL 字符串结果并将其保存在 C# Windows 应用程序字符串变量中