使用正则表达式获取 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})$
说明
^
字符串开头
(?:
非捕获组
(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
我有一个场景,我需要使用正则表达式获取 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})$
说明
^
字符串开头(?:
非捕获组(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