Регулярное выражение Java : Замените символы между двумя определенными символами равным количеством другого символа

#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. Я попытался поместить это в фрагмент, который работает . Но для этого требуется, чтобы пользователь как развернул, так и запустил его.