如何用JMESPath筛选以abc开头、YYYYMMDD-HH格式结尾的Name属性
JMESPath 筛选符合指定格式的Name属性方案
由于JMESPath的ends_with仅支持固定后缀匹配,无法直接适配动态时间格式,我们可以通过字符串截取+格式校验的组合方式实现需求,具体如下:
核心思路
针对abc-YYYYMMDD-HH的格式,拆解为以下校验项:
- 字符串以
abc开头 - 总长度固定为15位(
abc-占4位,YYYYMMDD占8位,-HH占3位,合计4+8+3=15) - 第4位和第13位必须是分隔符
- - 第5-12位为8位数字(对应YYYYMMDD)
- 第14-15位为00-23之间的两位数字(对应HH)
最终查询语句
--query 'Clusters[? starts_with(Name, `abc`) && length(Name) == 15 && substring(Name, 3, 4) == `-` && substring(Name, 12, 13) == `-` && matches(substring(Name, 4, 12), `^[0-9]{8}$`) && matches(substring(Name, 13, 15), `^[0-9]{2}$`) && to_number(substring(Name, 13, 15)) <= 23 ].[Name]'
补充说明
- 若你的JMESPath环境不支持
matches函数(部分轻量实现),可以用to_number(substring(xxx)) != null替代数字格式校验,结合长度约束确保格式合规。 - 若需要严格校验日期的有效性(如月份范围、每月天数),纯JMESPath实现会较为繁琐,建议在后续业务逻辑中补充校验。
内容的提问来源于stack exchange,提问作者user389955
相关产品推荐
相关产品推荐

