Регулярное выражение Получает число в предсказуемой строке с *Одной* группой захвата

# #regex #regex-lookarounds #google-cloud-logging

Вопрос:

Регулярное выражение ведения журнала GCP (Метрики на основе журналов) требует, чтобы я использовал только 1 группу захвата для своего фильтра регулярных выражений, в результате я не могу использовать взгляд вперед и назад, который я бы предпочел. Как я могу получить номер после KeyOne: этого ?

Лог: KeyOne:32|KeyTwo:0|KeyThree:|Language:english

Желаемый Захват: 32

Если бы мне разрешили несколько групп захвата, это сработало бы: (?lt;=KeyOne:)([0-9] )(?=|)

Есть ли какой-нибудь способ сделать это с одной группой захвата?

Ответ №1:

То, что вы хотите сделать, может быть сделано точно с одной группой захвата без поиска, потому что регулярное выражение обрабатывается функцией, которая возвращает только захваченную подстроку, если группа захвата определена в шаблоне.

В вашем случае вы можете просто преобразовать непотребляющие части шаблона в потребляющие шаблоны:

 KeyOne:([0-9] )| KeyOne:([0-9] )  

Примечание. вам нужно только | в конце, если вы хотите, чтобы совпадение происходило только тогда, когда | после числа следует символ.