如何编写正则表达式实现多区间数值分桶/分组匹配
数值分桶场景正则匹配方案
正则本身是字符串匹配工具,做数值区间判断前,请先确保待匹配内容为纯非负整数字符串、无多余前后缀字符;如果存在前导零、小数、夹杂其他字符的情况,建议先做数据清洗预处理,否则容易出现匹配误差。如果业务逻辑允许,优先使用原生数值大小比较实现分桶,性能和可维护性都优于正则方案。
以下是对应6个数值区间的整串匹配正则,可直接使用:
- 区间1:0 – 3000
匹配正则:^([0-9]{1,3}|[12][0-9]{3}|3000)$
覆盖范围:0-999的1-3位任意数字、1000-2999的1/2开头四位数字、精确值3000 - 区间2:3001 – 5000
匹配正则:^(300[1-9]|3[1-9][0-9]{2}|4[0-9]{3}|5000)$
覆盖范围:3001-3099、3100-3999、4000-4999、精确值5000 - 区间3:5001 – 10000
匹配正则:^(500[1-9]|5[1-9][0-9]{2}|[6-9][0-9]{3}|10000)$
覆盖范围:5001-5099、5100-5999、6000-9999、精确值10000 - 区间4:10001 – 30000
匹配正则:^(1000[1-9]|10[1-9][0-9]{2}|1[1-9][0-9]{3}|2[0-9]{4}|30000)$
覆盖范围:10001-19999、20000-29999、精确值30000 - 区间5:30001 – 50000
匹配正则:^(3000[1-9]|30[1-9][0-9]{2}|3[1-9][0-9]{3}|4[0-9]{4}|50000)$
覆盖范围:30001-39999、40000-49999、精确值50000 - 区间6:50001及以上(无上限)
匹配正则:^(5000[1-9]|50[1-9][0-9]{2}|5[1-9][0-9]{3}|[6-9][0-9]{4}|[1-9][0-9]{5,})$
覆盖范围:50001-59999、60000-99999、所有6位及以上正整数(即≥100000的数值)
注意:上述正则均添加了
^(字符串开头锚定)和$(字符串结尾锚定),确保是对完整数字串做匹配,避免出现长数字的子串被误匹配到低区间的问题。
内容的提问来源于stack exchange,提问作者vamshi reddy y
相关产品推荐
相关产品推荐

