Может быть, вы можете согласиться с простым шаблоном, как предложено.Но это может вызвать проблемы с некоторыми крайними случаями.Требуется немного больше, чтобы выполнить все ваши требования.
.. формула регулярного выражения, которая находит строку , начинающуюся с тире и , заканчивающуюся тире или точкой ,
Однако, если вы хотите сделать это за один раз, вам может понадобиться шаблон PCRE, подобный следующему: Demo
(?=^-.*[.-]$)-|\G(?!^).*\K-
Сначала проверьте всю строку с помощью заглядывания: (?=^-.*[.-]$)
.Если у нас есть совпадение, мы находимся в позиции 1.
Затем мы ищем первый тире для его замены, а затем альтернативу \ G-continue для соответствия последующим тире, которые не находятся в начальной позиции (?!^)
.Мы переходим к следующему -
с .*
и используем \K
, чтобы бросить все перед ним.Весело, правда?
В общем, я бы предложил использовать два регулярных выражения.Сначала найдите / подтвердите рассматриваемый шаблон, а затем выполните замену.Но это, вероятно, не вариант в вашей среде.