Мне нужно проанализировать подстроку «разрешение» из имен групп, однако у меня есть два шаблона, которым следуют эти имена групп:

gcp-edp-platform-dgov-nonprod-oneil-(permission)
gcp-edp-platform-dgov-prod-atp-(permission).groups

Либо имя группы заканчивается подстрокой разрешения, либо оно заканчивается подстрокой разрешения.groups.

Мне нужно иметь возможность извлекать только подстроку разрешения, не захватывая .groups.

Я знаю, что просто .*-(.*) дает мне все после последнего дефиса, но он по-прежнему захватывает .groups для имен, в которых он есть. Может ли кто-нибудь помочь мне создать регулярное выражение для этого экземпляра?

-1
unnest_me 16 Ноя 2022 в 19:52
Измените регулярное выражение на: .*-[^.]+ - [^.]+ означает, что один или несколько символов не являются точкой .. Это будет соответствовать остальным в строке 1 и до точки . в строке 2.
 – 
Poul Bak
16 Ноя 2022 в 20:17
Или для извлечения того, что находится внутри скобок, в .*-\(([^)(]+)\)
 – 
bobble bubble
16 Ноя 2022 в 21:47

2 ответа

Используйте осмотритесь:

(?<=-)[^-.]+(?!.*-)

См. демонстрацию.

Это работает с приведенными примерами (т.е. предполагается, что разрешения не содержат тире или точки).

0
Bohemian 16 Ноя 2022 в 20:23

Ты можешь использовать

.*-(.*?)(?:[.]groups)?$

См. демонстрацию регулярного выражения. Подробности:

  • .* - любой ноль или более символов, кроме символов разрыва строки, как можно больше
  • (.*?) - Группа 1: любые ноль или более символов, кроме символов разрыва строки, как можно меньше
  • (?:[.]groups)? - необязательная последовательность .groups
  • $ - конец строки.
0
Wiktor Stribiżew 21 Ноя 2022 в 21:56