#java #regex
Вопрос:
Замена всех символов между начальным символом » » и конечным символом » » равным количеством символов» -«.
Моя конкретная ситуация выглядит следующим образом:
Вход: — — —
Выход: — — — — —
String s = = " - - - ";
s = s.replaceAll("-\ -","---")
Это не работает. Как я могу получить результат на Java? Заранее спасибо.
Комментарии:
1. Вы должны указать, как это не работает. Что вы получите взамен.
2. Если мой ответ не решил вашу проблему, пожалуйста, подумайте об обновлении вопроса.
Ответ №1:
Вы можете использовать эту замену, используя утверждения look around:
String repl = s.replaceAll("(?<=-)\ (?=-)", "-");
//=> -----
Демонстрация регулярных выражений
(?<=-)\ (?=-)
будет соответствовать a
, если оно окружено -
с обеих сторон. Поскольку мы используем lookbehind и lookahead, поэтому мы не используем символы, это всего лишь утверждения.
Ответ №2:
Совпадения, которые у вас есть, перекрываются, посмотрите:
- - -
^^^
Match found and replaced by "---"
--- -
^
-- Next match search continues from here
WARNING: No more matches found!
Чтобы убедиться, что для следующего совпадения дефис свободен, вам нужно обернуть трейлинг -
положительным заголовком и использовать в качестве шаблона --
замены:
String s = = " - - - ";
s = s.replaceAll("-\ (?=-)","--")
Смотрите демонстрацию регулярных выражений.
Комментарии:
1. К вашему сведению: Вот ссылка на отладчик регулярных выражений. Если кто-нибудь хочет посмотреть, как теперь находятся совпадения в текущей строке, пожалуйста, нажмите
▶️
кнопку.2. Я попытался поместить это в фрагмент, который работает . Но для этого требуется, чтобы пользователь как развернул, так и запустил его.