Шаблон регулярного выражения для одного или двух чисел, не входящих в группу из 4 чисел

Я пытаюсь написать шаблон регулярного выражения, который будет использоваться в отчете 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 не поддерживает отрицательный ретроспективный просмотр, поэтому я не могу его использовать.


person Graham    schedule 17.06.2020    source источник
comment
вам не нужен негативный взгляд назад. вы можете просто исключить его, не добавляя в группу захвата   -  person user120242    schedule 17.06.2020


Ответы (1)


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

(?:^|\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)

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

person Tim Biegeleisen    schedule 17.06.2020