2013-07-30 6 views
1

Я хочу заменить подстроку, которая соответствует шаблону, только если она не соответствует другому шаблону. Например, в приведенном ниже коде я хочу заменить все «% s», но оставить «:% s» нетронутым.Как заменить все совпадающие шаблоны только в том случае, если они не соответствуют другому шаблону?

String template1 = "Hello:%s"; 
String template2 = "Hello%s"; 

String regex = "[%s&&^[:%s]]"; 

String str = template1.replaceAll(regex, ""); 
System.out.println(str); 

str = template2.replaceAll(regex, ""); 
System.out.println(str); 

Вывод должен быть:

Hello:%s 
Hello 

Я что-то в моем регулярном выражении отсутствует. Любые подсказки? Благодаря!

ответ

7

Использование отрицательного lookbehind для достижения своей цели:

String regex = "(?<!:)%s"; 

Это соответствует %s только если не : прямо перед ним.

+0

«Отрицательный взгляд», а? Работы ... большое спасибо! – Bala

Смежные вопросы