为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式获取 UNSPSC 中的商品级别

使用正则表达式获取 UNSPSC 中的商品级别

互换的青春 2021-12-22 19:21:20
我有一个场景,我需要使用正则表达式获取 UNSPSC 商品级别并获取级别为..每个 UNSPSC 代码都是 8 位数字..实际水平:XX 00 00 00第二层:XX XX 00 00第三层:XX XX XX 00第四层:XX XX XX XX。有什么方法可以使用单个正则表达式获得级别,我使用的是 ((.)+)00 ... 对于每个级别匹配。不知道该怎么做。谢谢。
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您的正则表达式((.)+)00匹配 1+ 次后跟00不考虑 8 位数字的任何字符。对于第四级,您需要不以00.结尾的匹配项。

如果您不能有 4 对 2 次零,并且在 2 次零之前不能出现 2 次零,您可以使用捕获组的交替。然后在匹配器中检查是否存在第 1、2 或 3 组以获得级别 1、2 或 3。如果有匹配但没有组,则您将获得级别 4。

^(?:(0[1-9]|[1-9][0-9])0{6}|(0[1-9]|[1-9][0-9]){2}0{4}|((?:0[1-9]|[1-9][0-9])){3}00|(?:0[1-9]|[1-9][0-9]){4})$

正则表达式演示

解释

  • ^ 字符串的开头

  • (?: 非捕获组

    • (0[1-9]|[1-9][0-9])0{6} 匹配 01-99 然后是 6 次 0

    • | 或者

    • (0[1-9]|[1-9][0-9]){2}0{4} 匹配 2 次 01-99,然后匹配 4 次零

    • | 或者

    • (?:(?:0[1-9]|[1-9][0-9])){3}00 匹配 3 次 01-99,然后匹配 2 次零

    • | 或者

    • (0[1-9]|[1-9][0-9]){4}) 比赛4次01-99

  • ) 关闭非捕获组

  • $ 字符串的结尾

例如:

while (matcher.find()) {

    System.out.println("Full match: " + matcher.group(0));

        if (null != matcher.group(1)) {

            System.out.println("Level 1");

        } else if (null != matcher.group(2)) {

            System.out.println("Level 2");

        } else if (null != matcher.group(3)) {

            System.out.println("Level 3");

        } else {

            System.out.println("Level 4");

        }   

}

输出:


Full match: 01000000

Level 1

Full match: 10000000

Level 1

Full match: 99990000

Level 2

Full match: 99999900

Level 3

Full match: 55555555

Level 4


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信