Необязательные группы регулярных выражений без захвата всегда фиксируют - PullRequest
0 голосов
/ 19 апреля 2020

Каким-то образом дополнительные группы захвата не работают для меня. Я пытаюсь захватить текст из строки, которая иногда содержит нежелательный текст.

I want this, N3
and this
this 2
this 2, N1

Это нежелательно

, N3, N1

Мое регулярное выражение выглядит так:

^[a-z0-9 ]*(?:, N\d)?$

Пример : https://regex101.com/r/la3G2Q/2

Как я могу получить текст перед запятой, даже если иногда есть запятая?

I want this
and this
this 2
this 2

1 Ответ

1 голос
/ 19 апреля 2020

Вместо того, чтобы использовать группу без захвата, вы можете использовать предпросмотр, чтобы утверждать, что за нужными символами следуют либо , N и ди git, либо конец строки:

^[a-z0-9 ]+(?=, N\d$|$)

Таким образом, символы из , не будут включены в матч.

Демонстрация по регулярному выражению * 101

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

^([a-z0-9 ]+)(?:, N\d)?$

Демонстрация на regex101

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