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

Getting Commodity Level in UNSPSC using Regular Expression

我有一个场景,我需要使用正则表达式获取 UNSPSC 商品级别并将级别获取为..

每个 UNSPSC 代码都是 8 位数字..

等级:XX 00 00 00

二级:XX XX 00 00

第 3 级:XX XX XX 00

第 4 级:XX XX XX XX。

他们有什么方法可以使用单一正则表达式来达到水平,我正在使用, ((.)+)00 ...对于每个级别匹配。

不知道该怎么做。 谢谢。

您的正则表达式 ((.)+)00 匹配任何字符后跟 00 的次数超过 1 次,但不考虑 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})$

Regex demo

说明

  • ^ 字符串开头
  • (?:非捕获组
    • (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

Java demo