Получение уровня товара в UNSPSC с использованием регулярного выражения - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть сценарий, в котором мне нужно получить уровень товаров UNSPSC с помощью регулярного выражения и получить уровень как ..

каждый код UNSPSC состоит из 8 цифр.

I уровень: XX 00 00 00

2-й уровень: XX XX 00 00

3-й уровень: XX XX XX 00

4-й уровень: XX XX XX XX.

Есть ли какой-нибудь способ получить уровень с помощью Single Regular Expression, я использовал, ((.) +) 00 ... для каждого совпадения уровней.

Не уверен, как это сделать. Спасибо.

1 Ответ

0 голосов
/ 01 ноября 2018

Ваше регулярное выражение ((.)+)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})$

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-демонстрация

...