Как создать правильное регулярное выражение, чтобы найти последний символ, который я хочу? - PullRequest
1 голос
/ 20 апреля 2019

Мне нужно создать регулярное выражение, чтобы найти последнее подчеркивание в строке, например 012344_2.0224.71_3 или 012354_5.00123.AR_3.335_8

Я хотел найти последнюю часть с выражением [^.]+$, а затем найти подчеркивание в найденном элементе, но я не могу с этим справиться.

Надеюсь, вы мне поможете:)

Ответы [ 4 ]

1 голос
/ 20 апреля 2019

Просто используйте класс отрицательных символов [^_], который будет соответствовать всему, кроме подчеркивания (это помогает гарантировать, что после него не будет найдено никаких других подчеркиваний), и конец строки $

Шаблон будет выглядеть так:

(_)[^_]*$

Последнее подчеркивание _ находится в группе захвата, поэтому вы хотите вернуть субматч.Вы бы заменили группу 1 (ваше подчеркивание).

Смотрите это вживую: Regex101

Обратите внимание на выделенную зеленым цветом часть на Regex101, это ваше подсправка и что будетподлежит замене.

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

Шаблон [^.]+$ не соответствует точке 1+ раз, а затем устанавливает конец строки.Это даст вам совпадения 71_3 и 335_8

То, что вы хотите сопоставить, - это подчеркивание, когда больше нет подчеркиваний после.

Один из способов сделать это - использовать отрицательный прогноз (?!.*_), если поддерживается, который утверждает, что то, что справа, не соответствует ни одному символу, за которым следует подчеркивание

_(?!.*_)

Образец демо

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

Самое простое решение, которое я могу себе представить, - это использование .*\K_, однако не все ароматы регулярных выражений поддерживают \K.

Если нет, другой идеей было бы использовать _(?=[^_]*$)

Youиметь демоверсию опции first и second .

Объяснение:

.*\K_: извлекает любой символ доподчеркиваниеПоскольку квантификатор * является жадным, он будет соответствовать до последнего подчеркивания.Затем \K отбрасывает предыдущее совпадение, а затем мы сопоставляем подчеркивание.

_(?=[^_]*$): извлекаем подчеркивание, которому предшествуют символы не подчеркивания, до конца строки

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

Если вам не нужно ничего, кроме «net» (т. Е. Ничего не соответствует, кроме последнего подчеркивания), используйте положительный прогноз, чтобы убедиться, что в строке больше нет подчеркиваний:

/_(?=[^_]*$)/gm

Демо

...