Шаблон регулярного выражения для одного или двух чисел, не входящих в группу из 4 чисел - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь написать шаблон регулярного выражения, который будет использоваться в отчете Data Studio (в котором используется RE2 ) для извлечения первого числа от 1 до 13.

Вот пример того, что я хочу:

8X/CS2 = 8
Experiment = no match
7Y/CS3 = 7 
7Y/CS2 = 7
2019-10T/Tk1 = 10
2019-7x/Pe4 = 7
2019-8x/Pe4 = 8
2019-12E/Tk-II = 12
2019-12D/Ps-4 = 12

Я установил, что ([1-9]|1[0123]) будет извлекать числа.

RE2 не поддерживает отрицательный просмотр назад, поэтому я не могу его использовать.

Есть другие предложения, как этого добиться?

Заранее спасибо!

1 Ответ

1 голос
/ 17 июня 2020

Похоже, что следующее регулярное выражение работает:

(?:^|\D)(1[0123]|[1-9])(?:\D|$)

Сам номер будет доступен в первой группе захвата.

Демо

Вот объяснение шаблона:

(?:^|\D)         match either start of string or non digit character
(1[0123]|[1-9])  match 1-13
(?:\D|$)         match either end of string or non digit character

Идея состоит в том, чтобы сопоставить 1-13, которые окружены границами с обеих сторон, как определено как нечто, не являющееся числом. Обратите внимание, что с помощью поисковых запросов мы могли бы легче написать это:

(?<!\d)(1[0123]|[1-9])(?!\d)

Однако, поскольку ваш вариант регулярного выражения не поддерживает это, мы должны использовать другой способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...