Как исправить следующие RegEx?

У меня есть следующий кусок кода. Я использую модификатор шаблона Case-insensitve, чтобы он мог найти любое вхождение, но я хочу, чтобы замена была именно тем символом, который соответствовал шаблону, сохраняя регистр. Как я мог это исправить?

    String str = "Ten tender tEens";
    String substr = "te";
    str = str.replaceAll("(?i)"+substr, "("+substr+")");

    System.out.println( str );

Желаемый результат:(Te) n (te) nder (tE) ens

Полученный результат:(te) n (te) nder (te) ens

3 ответа

Решение

replaceAll() работать так же, как matcher(string).replaceAll(exp): Чтобы сделать это и для лучшего понимания, вы можете взломать код, как:

     String str = "Ten tender tEens";
     Pattern pattern=Pattern.compile("(?i)(te)");
     Matcher matcher=pattern.matcher(str);

     System.out.println(  matcher.replaceAll("$1"));

Комбинируя эти шаги, вы можете использовать (делает то же самое):

String substr = "te";
str = str.replaceAll("(?i)("+substr+")", "($1)");

Вам нужно использовать группу захвата.

str = str.replaceAll("(?i)("+substr+")", "($1)");

Вы должны использовать

str = str.replaceAll("(?i)("+substr+"?)", "($1)");

Это создаст группу и заменит группу.

Другие вопросы по тегам