2015-11-26 5 views
1

Я хочу replaceAll строки, как:Regex - заменить строки, содержащие только один, но повторяющиеся полукокс

"aaaa" 
"zzzzzzz" 
"----------" 
"TTTTTT" 
"...." 

Строка содержит только один символ, а> 3 раза.

Я использую Java. Я могу заменить конкретный символ (например, «а») с более чем в 3 раза, но не знаю, как сделать это с любым полукокса:

str = str.replaceAll("^[a]{4,}$", ""); 

Любая идея? Если это невозможно сделать в regex, как бы вы это сделали?

+1

Любой символ? Используйте '' (? S)^(.) \\ 1 {3,} $ "'. –

+0

Кажется работать, спасибо! :-) Не могли бы вы объяснить это? – dynobo

ответ

3

Любой символ может быть сопоставлен с . и Pattern.DOTALL модификатором.

Для проверки того, является ли он одним и тем же, мы можем записать первый символ и использовать обратную ссылку в соответствии с одним и тем же текстом и ограничивающим квантором {3,} для проверки как минимум трех вхождений одной и той же подстроки.

См regex и IDEONE demo:

List<String> strs = Arrays.asList("aaaa", "zzzzzzz", "----------", "TTTTTT", "...."); 
for (String str : strs) 
    System.out.println("\"" + str.replaceAll("(?s)^(.)\\1{3,}$", "") + "\"");