我必须将一个字符串传递给一个程序,根据字符串,它只返回一个响应值。我在为两个案例构建模式时遇到困难。
如果字符串以'?'结尾?并且全部大写返回' y'。
如果字符串以'!'结尾,或全部为大写(最后没有问号)返回' z'。
如果字符串只返回空格' a'
以下是两个示例字符串,它们是四个独立的模式 -
phrase1 = "Simple String with some UPPercase in Between ends with?"
phrase2 = "BIG STRING ALL CAPS ENDS WITH?"
phrase3_a = "ALLCAPSSTRING NOTHING AT THE END OF STRING"
phrase3_b = "Any String with ALL UPPERCASE (or not) but ends with!"
phrase4 = "\t\t\t\t"
我还没有建立准确的模式,这就是我在这里所要求的。在那之后,我计划使用一个re.compile
所有模式&然后finditer
使用非None的组。在下面的代码中,我删除了whitespaces
,因为如果没有其他模式匹配,匹配空白模式[\s]
将返回None,我可以使用separetely-
phrase=re.sub(r'[\s]','',phrase)
pattern_phrase1 = re.compile (r'[a-zA-Z0-9]\?$')
pattern_phrase2 = re.compile (r'[A-Z0-9]\?$')
pattern_phrase3 = re.compile (r'[A-Z]|[.!$]')
答案 0 :(得分:0)
解决方案1 - 使用isx函数
def hey(phrase):
responses ={'ques':x,'ques_yell':y,'yell':z,'onlycall':b,'what':c}
phrase=''.join(phrase.split())
if phrase=='':
return responses['onlycall']
if phrase.isupper():
if phrase[-1]=='?':
return responses['ques_yell']
return responses['yell']
elif not phrase.isupper():
if phrase[-1]=='?':
return responses['ques']
return responses['what']