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

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

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

实际水平:XX 00 00 00

第二层:XX XX 00 00

第三层:XX XX XX 00

第四层:XX XX XX XX。

有什么方法可以使用单个正则表达式获得级别,我使用的是 ((.)+)00 ... 对于每个级别匹配。

不知道该怎么做。谢谢。


互换的青春
浏览 152回答 1
1回答

千巷猫影

您的正则表达式((.)+)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: 01000000Level 1Full match: 10000000Level 1Full match: 99990000Level 2Full match: 99999900Level 3Full match: 55555555Level 4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java