python - 如何基于一个正则表达式产生积极或消极的回应?
问题描述
所以我正在编写一个 python 机器人,它会根据用户输入中的一些关键词来响应用户输入。我的程序接受西班牙语输入并显示西班牙语输出。它们是非常简单的短语。如果输入是“Yo no estoy feliz”,意思是“我不开心”,那么预期的输出应该是“¿Porqué no estás feliz?”,意思是“你为什么不开心”。如果输入是“Yo estoy feliz”,意思是“我很高兴”,那么预期的输出应该是“¿Porqué estás feliz?”。
我可以用两种不同的正则表达式处理正面和负面的情况,但我试图用一个正则表达式来处理。我尝试使用可选分组来实现这一点,但如果我的输入是“Yo estoy feliz”,我没有得到想要的结果。但是,我通过“Yo no estoy feliz”得到了想要的结果。我对正则表达式非常陌生,我将不胜感激任何有关这方面的指导。下面是代码和一些注释
import sys
import re
# Run from command line as: python [progname.py] "Yo no estoy feliz."
# INPUT: Yo no estoy feliz. [I am not happy]
# EXPECTED OUTPUT : ¿Porqué no estás feliz? [Why are you not happy]
###### Translation #######
# ¿Porqué no estás feliz? == Why are you not happy?
# ¿Porqué estás feliz? == Why are you happy
def caseHandler(regExInput):
return re.compile(regExInput, re.IGNORECASE)
def bot(userInput):
reply = ""
expression = caseHandler(r'(.* )?(?:no)? estoy (.* )?(.+)\b')
if (expression.match(userInput)):
groupName = expression.search(userInput) # Ensures if input matches regex
if (groupName.group(4) and groupName.group(2)):
reply = "¿Porqué no estás " + groupName.group(4) + "?" # presence of "no" in input
elif (groupName.group(4)):
reply = "¿Porqué estás " + groupName.group(4) + "?" # absence of "no" in INPUT
else:
reply = "Cuéntame más." # Tell me more
else:
reply = "Cuéntame más." # Tell me more
return reply
if (len(sys.argv) < 2):
print("Please provide an input phrase")
else:
print(bot(str(sys.argv[1])))
解决方案
你可以尝试这样的事情:
import sys;
import re;
def caseHandler(regExInput):
return re.compile(regExInput, re.IGNORECASE)
def bot(userInput):
expression = caseHandler(r'((?:\bno )?)estoy +(.+)\b')
m = expression.search(userInput)
if m:
reply = "¿Porqué " + m.group(1) + "estás " + m.group(2) + "?"
else:
reply = "Cuéntame más."
return reply
if (len(sys.argv) < 2):
print("Please provide an input phrase")
else:
print(bot(str(sys.argv[1])))
推荐阅读
- python - 在 for 循环中命名拆分数据帧
- spring-boot - 在一个方面在运行时注入一个方法参数值
- c# - 如何从 C# UWP 向 MySQL 插入双精度值
- android - 如何将 Flutter ui 视图嵌入到 React Native 应用程序中?
- xamarin.forms - 在 Xamarin.Forms 中制作带有虚线或虚线文本装饰的标签
- nginx - kubernetes:在 LoadBalancer 服务上设置 Https
- python - 我如何将一个列表的元素拆分为另一个列表的元素,但按照它们在列表中的显示顺序
- java - Communications link failure上一个成功发送到服务器的数据包是0毫秒前
- c# - 如何从 exe 中找出目标框架名称和版本?
- python-3.x - 在python3的这段代码中我做错了什么