jenkins pipeline re匹配 “由逗号分隔的多个键值对”(支持中文冒号和逗号)
jenkins pipeline re匹配 “由逗号分隔的多个键值对”要求格式为 key: value, key: value/^[^:,]:\s*[^:,](?:\s*,\s*[^:,]:\s*[^:,])*$/deftestStrings[author: tom,// 单个 - 通过author: tom, status: active,// 多个 - 通过author: tom,status:active,id:123,// 紧凑格式 - 通过author: tom,,// 错误以逗号结尾 - 失败author,// 错误无冒号 - 失败: value// 错误无 Key - 失败]defregex/^[^:,]:\s*[^:,](?:\s*,\s*[^:,]:\s*[^:,])*$/script{testStrings.each{str-if(str~regex){echo【验证通过】:${str}}else{echo【验证失败】:${str}}}}支持中文冒号和逗号为了支持中文的冒号和逗号我们需要在正则表达式的排除字符集和分隔符匹配两个部分进行扩展。扩展后的正则表达式/^[^:,][:]\s*[^:,](?:\s*[,]\s*[^:,][:]\s*[^:,])*$/修改点详细说明排除字符集[^:,]原本是[^:,]现在增加了中文冒号和中文逗号。作用确保在匹配“键”或“值”的过程中一旦遇到任何形式的冒号或逗号就停止防止跨越分隔符。冒号匹配[:]将原本固定的:改为字符集[:]。作用兼容英文冒号和中文全角冒号。逗号匹配[,]将原本固定的,改为字符集[,]。作用兼容英文逗号和中文全角逗号。Groovy (Jenkins Pipeline) 示例代码在 Groovy 中你可以直接使用斜杠/.../定义正则它对中文字符有很好的支持// 待测试的各种混合格式deftestStrings[name: tom,// 纯英文格式姓名张三,// 纯中文格式项目: Jenkins状态成功,// 中英文混合英文冒号中文逗号中文冒号key1value1,key2:value2key3: v3,// 极端混合格式错误格式,// 错误格式姓名,// 错误缺少值张三// 错误缺少键]// 扩展后的正则defregex/^[^:,][:]\s*[^:,](?:\s*[,]\s*[^:,][:]\s*[^:,])*$/script{testStrings.each{str-// 使用 ~ 进行全字符串匹配if(str~regex){echo【验证通过】:${str}}else{echo【验证失败】:${str}}}}逻辑解析这个正则的结构依然保持了“首个键值对 0到多个后续键值对”的逻辑^[^:,][:]\s*[^:,]匹配第一个键值对。键和值中都排除了:,这四个字符。支持中英文冒号。(?:\s*[,]\s*...)*[,]允许使用中英文逗号作为分隔符。内部重复了相同的键值对匹配逻辑。提示空格处理正则中的\s*只匹配了标准空白符如空格、Tab。中文输入法有时会产生“全角空格”如果需要兼容全角空格可以将\s替换为[ \t\u3000]其中\u3000是全角空格的 Unicode。空值允许如果你希望允许键值为空的情况请将值部分的改为*即[^:,]*。python re 匹配importre# find part12 marktexttype #123,234, 333 this part12 mark texttype #123 this part12 mark # 使用 search 查找matchre.search(rtype #[\d, ]\s(.*),text)ifmatch:# group(1) 获取第一个括号内匹配到的内容resultmatch.group(1)print(f匹配结果: {result})# 按数字和逗号的组合进行分割partsre.split(rtype #[\d, ]\s,text)resultparts[1]iflen(parts)1else正则表达式详细解释type #精确匹配开头的字符串。[\d, ]匹配一个或多个数字 (\d)、逗号 (,) 或空格 ( )。这部分会覆盖 #123,234, 333。\s匹配数字部分与目标文本之间的空格。(.)关键部分。圆括号表示一个“捕获组”. 代表任意字符代表匹配零个或多个。它会抓取剩下的所有内容。