为了账号安全,请及时绑定邮箱和手机立即绑定

如何在一个命令中传递不敏感的标志以匹配?

如何在一个命令中传递不敏感的标志以匹配?

德玛西亚99 2021-09-28 21:02:17
我正在对编译模式后面带有标志的几个键进行不区分大小写的匹配:def case(string):    switcher = {        re.compile('bronze', re.IGNORECASE):10,        re.compile('carbon', re.IGNORECASE):16,    }    for i in switcher.keys():        if re.match(i, string):            return switcher[i]    return "Invalid: " + string有没有更聪明的方法来传递标志,所以我不必在每一行中都指定它?
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

你根本不需要使用re.compile,真的。re.match和朋友无论如何在内部缓存上次使用的正则表达式模式。


在这里,switcher已从case函数中重构出来,因此不会在每次调用时重新计算;此外,我们使用dict.items()同时获取模式和值。


switcher = {

    'bronze': 10,

    'carbon': 16,

}


def case(string):

    for pattern, value in switcher.items():

        if re.match(pattern, string, flags=re.IGNORECASE):

            return value

    return "Invalid: " + string

但是,根据您的示例,尚不清楚您是否需要正则表达式,或者您是否只需要不区分大小写的子字符串匹配,在这种情况下,将测试字符串小写在计算上会更便宜,然后只需使用if str1 in str2,就像这样(假设与switcher上一个示例中的 dict相同。)


def case_no_re(string):

    l_string = string.lower()

    for pattern, value in switcher.items():

        if pattern in l_string:

            return value

    return "Invalid: " + string


查看完整回答
反对 回复 2021-09-28
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号