Python3中能否对match/case的匹配项使用列表切片?
用Python match/case实现字符串前缀判断
当然可以用match/case替代原来的if/elif前缀判断逻辑,但你写的case语法不符合Python模式匹配规则,正确的实现方式有以下几种:
1. 通配符前缀匹配
用_作为通配符匹配任意后缀,直接指定目标前缀:
x = "Test_Case_Box 1" match x: case "Test_Case_Box" + _: print("匹配到Test_Case_Box前缀") case "Test_Case_Circle" + _: print("匹配到Test_Case_Circle前缀") case _: print("无匹配前缀")
2. 守卫条件(最贴近原if逻辑)
在case后追加if条件,直接复用startswith或切片判断,和你原来的逻辑完全对应:
x = "Test_Case_Circle 1" match x: case x if x.startswith("Test_Case_Box"): # 等价于你原来的切片判断(注意:"Test_Case_Box"实际长度是13,之前的x[0:19]是错误的) print(f"匹配到Test_Case_Box,前缀内容:{x[:13]}") case x if x.startswith("Test_Case_Circle"): print(f"匹配到Test_Case_Circle,前缀内容:{x[:17]}") case _: print("未匹配到指定前缀")
3. 结构化匹配(针对固定格式字符串)
如果你的字符串是「前缀 + 空格 + 数字」的固定格式,还能直接提取编号部分:
x = "Test_Case_Box 2" match x: case f"Test_Case_Box {num}": print(f"匹配到Test_Case_Box,编号:{num}") case f"Test_Case_Circle {num}": print(f"匹配到Test_Case_Circle,编号:{num}") case _: print("格式不匹配")
内容的提问来源于stack exchange,提问作者stopbanningmelmao123
相关产品推荐
相关产品推荐

