如何根据一个正则表达式产生正面或负面的回应?

How to produce a positive or negative response based on one regex?

所以我正在编写一个 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])))