Обрезать значение после 2 текстовых шаблонов - PullRequest
1 голос
/ 11 апреля 2019

У меня есть строка, из которой мне нужно извлечь значение «миграции» из (динамического содержимого).

Проблема состоит в том, что в отмеченном разделе есть несколько шаблонов.Вместо определения 2 регулярных выражений я хотел бы иметь его на одном.

(?i)Host: api-(.*?).A9net.io

(?i)Host: stt-(.*?).A9net.io

Один шаблон: Host: api-**migration**.A9net.io

Второй шаблон: Host: stt-**migration**.A9net.io

Мне нужноЗначение миграции извлечено

Ответы [ 2 ]

3 голосов
/ 11 апреля 2019

Вы можете использовать чередование для соответствия либо API, либо SST. Примечание: экранируйте точку, чтобы буквально соответствовать ей.

(?i)Host: (?:api|stt)-(.*?)\.A9net\.io

Regex demo

(.*?) соответствует 0+ раз, что также соответствует, когда миграции нет. В этом случае вы можете использовать (.+?) вместо того, чтобы как минимум соответствовать 1 символу.

Если значение миграции не может содержать точку, вы также можете использовать отрицательный символьный класс для совпадения 1+ раз, а не точки ([^.]+)

0 голосов
/ 11 апреля 2019

Вы можете использовать этот шаблон: (?i)^Host: (?:stt|api)-([^.]+).A9net.io$

Как уже упоминалось, чередование - это ключ к вашей проблеме.

Кроме того, рекомендуется использовать класс отрицательных символов вместо ленивого квантификатора (например,как +?), когда это возможно.В данном случае это [^.]+ - он соответствует одному или нескольким символам, отличным от точки, поэтому он будет совпадать до первого появления точки, что и требуется при использовании квантификатора lazu, за которым следует точка.

Демо

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