Regex удалить первый раздел и необязательный последний раздел - PullRequest
0 голосов
/ 29 мая 2019

Мне нужно использовать регулярное выражение для сопоставления ci-, которое всегда будет там, но затем совпадать с необязательными -l, -s, -r, чтобы затем я мог извлечь среднюю часть, но, как выМожно видеть, что некоторые из приведенных ниже примеров имеют черточки, разделяющие другие слова, которые я не хочу удалять.

ci-star-l
ci-pound-sign
ci-pound-sign-r

Выше было бы:

star
pound-sign
pound-sign

Это моя попытка, однако она ошибочна:

(ci-).*(-.)

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

(...) соответствует группе, из которой вы можете получить контекст позже.

$ - конец строки.

Поэтому я бы использовал ci-(.*?)(?:-\w)?$, и тогда ваш результат - первая подходящая группа.

2 голосов
/ 29 мая 2019

Предлагаю заменить спички

^ci-|-[lsr]$

с пустой строкой. Обратите внимание, что метод / функция замены regex должен поддерживать множественные замены.

См. Демоверсию regex .

Подробнее

  • ^ci- - ci- на старте
  • | - или
  • -[lsr]$ - - и l / s / r в конце строки.

Если вы хотите использовать свой первоначальный подход, вы можете рассмотреть

^ci-(.*?)(?:-[lsr])?$

См. это демо регулярных выражений . Здесь (.*?) захватывает любые 0+ символов, но как можно меньше в Группу 1, а (?:-[lsr])?$ соответствует необязательным -l, -r, -s в конце строки. Нежадный квантификатор *? и якорь $ имеют решающее значение для работы этого регулярного выражения. Замена должна быть сделана с обратной ссылкой на группу 1 (обычно $1 или \1).

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