Регулярное выражение для разделения на последнюю точку, если после точки стоит 1 - PullRequest
0 голосов
/ 25 октября 2019

Я хотел бы разбить этот тип строк на две группы:

    aaa.aa.aa.1
    aaa.aa.aa
    bbbbb.1
    bbbbb

, чтобы иметь в первой группе символы до .1 и в другой группе 1 или пусто, если в конце нет 1:

   aaa.aa.aa     1
   aaa.aa.aa     
   bbbbb         1
   bbbbb

Я хотел бы достичь этого с одним регулярным выражением. Я придумал (\S*).(1), но он не разбивается, если в конце нет 1.

1 Ответ

0 голосов
/ 25 октября 2019

Попробуйте этот шаблон: (\S*?)(?:\.(1)$|$)

Объяснение

(\S*?) - \S* из вашего шаблона с добавленным ленивым квантификатором (?),Это будет соответствовать как можно меньшему числу символов

(?: ... ) - группа без захвата для сохранения номеров желаемой группы захвата

\.(1)$|$ - (1) буквальная точка \., за которой следует символбуквально 1 (хранится в группе захвата), за которым следует конец строки $ ИЛИ (2) конец строки (в случае отсутствия .1)

Образец теста

ВХОД:

aaa.aa.aa.1
aaa.aa.aa
bbbbb.1
bbbbb

ВЫХОД:

[1] aaa.aa.aa    [2] 1
[1] aaa.aa.aa    [2] (empty)
[1] bbbbb        [2] 1
[1] bbbbb        [2] (empty)

ПРИМЕЧАНИЕ : Спросил в комментариях о ситуации aaa.aa.aa. и было установлено, что этоне ожидается ввода. Этот шаблон не удалит последнюю точку, так как 1

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