正则表达式区分String中的所有与少量char大写

时间:2018-05-24 04:00:42

标签: regex python-3.x

我必须将一个字符串传递给一个程序,根据字符串,它只返回一个响应值。我在为两个案例构建模式时遇到困难。

  • 如果字符串以'?'结尾?并且不是全部大写返回' x',无论字符串的内容是什么。
  • 如果字符串以'?'结尾?并且全部大写返回' 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]|[.!$]')

1 个答案:

答案 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']