Мне нужно проанализировать подстроку «разрешение» из имен групп, однако у меня есть два шаблона, которым следуют эти имена групп:
gcp-edp-platform-dgov-nonprod-oneil-(permission)
gcp-edp-platform-dgov-prod-atp-(permission).groups
Либо имя группы заканчивается подстрокой разрешения, либо оно заканчивается подстрокой разрешения.groups.
Мне нужно иметь возможность извлекать только подстроку разрешения, не захватывая .groups
.
Я знаю, что просто .*-(.*)
дает мне все после последнего дефиса, но он по-прежнему захватывает .groups для имен, в которых он есть. Может ли кто-нибудь помочь мне создать регулярное выражение для этого экземпляра?
2 ответа
Используйте осмотритесь:
(?<=-)[^-.]+(?!.*-)
См. демонстрацию.
Это работает с приведенными примерами (т.е. предполагается, что разрешения не содержат тире или точки).
Ты можешь использовать
.*-(.*?)(?:[.]groups)?$
См. демонстрацию регулярного выражения. Подробности:
.*
- любой ноль или более символов, кроме символов разрыва строки, как можно больше(.*?)
- Группа 1: любые ноль или более символов, кроме символов разрыва строки, как можно меньше(?:[.]groups)?
- необязательная последовательность.groups
$
- конец строки.
Похожие вопросы
Новые вопросы
regex
Регулярные выражения предоставляют декларативный язык для сопоставления шаблонов в строках. Они обычно используются для проверки строк, разбора и преобразования. Укажите язык (PHP, Python и т. д.) или инструмент (grep, VS Code, Google Analytics и т. д.), который вы используете. Не размещайте вопросы, требующие объяснения того, что означает символ или чему будет соответствовать конкретное регулярное выражение.
.*-[^.]+
-[^.]+
означает, что один или несколько символов не являются точкой.
. Это будет соответствовать остальным в строке 1 и до точки.
в строке 2..*-\(([^)(]+)\)