如何匹配一个字符串,中间有任意词,并将其存储为变量?
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 does
和 mean
. 通过使用正则表达式,它真的很简单。
另一答案
如果我对你的机器人理解正确的话,它将定义 "什么是 "和 "意味着 "之间的任何东西。 我能想到的一个解决方案是。
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)
但我建议使用正则表达式解决方案,它们的效率更高。
以上是关于如何匹配一个字符串,中间有任意词,并将其存储为变量?的主要内容,如果未能解决你的问题,请参考以下文章