如何编写正则表达式匹配多个指定格式的data.*ID类赋值字符串
正则表达式问题解答
原有正则存在的问题
- 方括号
[]为字符组匹配规则,仅能匹配单个字符,你编写的[test.+|new]实际仅能匹配括号内任意单个字符,无法实现匹配test、new、testcase这类前缀的效果 [ID]?同样是单字符匹配逻辑,额外添加的可选标识会导致大量不符合要求的字符串也被命中,同时无法适配大小写不同的ID后缀写法- 捕获分组
(.+)?为贪婪匹配,会将后续的逗号、右大括号等结束符号也一并捕获,无法正确提取等号后的值 - 没有配置忽略大小写规则,无法匹配
testid、TestCaseID这类大小写混合的key
正确正则表达式
根据你提供的待匹配样例,可用以下正则实现:
data\.(test|new|testcase)ID=([a-z0-9._]+)[,}]
如需适配大小写不敏感的场景(匹配testid、TestCaseID这类写法),开启正则忽略大小写flag即可。
匹配逻辑说明
data\.:固定匹配前缀data.,点在正则中为特殊字符,需要加转义符\才能匹配字面量的点(test|new|testcase):分组匹配ID前的三类前缀,覆盖你给出的所有样例前缀ID=:固定匹配ID和等号,配合忽略大小写flag可以适配id、ID、Id等不同写法([a-z0-9._]+):分组捕获等号后的value,支持小写字母、数字、点、下划线,完全符合你给出的所有样例value格式[,}]:匹配结尾的逗号或者右大括号,和你原有逻辑保持一致
Python调用示例
import re test_strs = [ "data.testID=abd.123,", "data.newID=abc.123.123,", "data.testcaseID=abc.1_2,", "data.testid=abc.123,", "data.TestCaseID=abc.1.2," ] # 加re.IGNORECASE参数开启忽略大小写匹配 pattern = re.compile(r'data\.(test|new|testcase)ID=([a-z0-9._]+)[,}]', re.IGNORECASE) for s in test_strs: m = pattern.search(s) if m: print(f"匹配到的value:{m.group(2)}")
运行代码后可以正确提取所有样例中等号后对应的value值。
内容的提问来源于stack exchange,提问作者user3134199
相关产品推荐
相关产品推荐

