Java регулярное выражение для вставки текста между фигурными скобками

У меня есть строка

a = "stringWithBraces()"

Я хочу создать следующую строку

"stringWithBraces(text)"

Как мне добиться этого с помощью регулярных выражений?

Я попробовал это:

a.replaceAll("\\(.+?\\)", "text");

Но получите это:

stringWithBraces()

4 ответа

Вы можете использовать lookaheads и сделать что-то вроде этого:

(?<=\().*?(?=\))

Live Demo

Таким образом, делая это:

String a = "stringWithBraces()";
a = a.replaceAll("(?<=\\().*?(?=\\))", Matcher.quoteReplacement("text"));

System.out.println(a);

Выходы:

stringWithBraces(text)

Обратите внимание, что по отношению к replaceAll() тогда replacement Строка имеет какой-то специальный символ. Так что вы, скорее всего, должны использовать Matcher.quoteReplacement() чтобы избежать их и быть в безопасности.

Вы можете использовать это:

a = a.replaceAll("\\((.*?)\\)", "(text)");

Вы должны заменить каждую вещь в скобках (text)

+ требуется хотя бы один символ, ? добавленное здесь означает самое короткое совпадение, поэтому "...(.)...(.)..." не будет продолжать находить ".)...(.".

a.replaceAll("\\(.*?\\)", "(text)");

Вы, возможно, намеревались replaceFirst; хотя я думаю нет.

Вы также можете позволить точке . сопоставлять символы новой строки, для многострочных соответствий, используя опцию DOT_ALL (?s):

a.replaceAll("(?s)\\(.*?\\)", "(text)");

Что насчет этого:

String first = "abc()";
String myVariableString = "def";
first = first.substring(0, first.length()-1) 
                           + myVariableString 
                           + first.substring(first.length()-1, first.length());
System.out.println(first);

это меняется

"abc()" to "abc(def)"

если это то, что вы хотите достичь в соответствии с моим пониманием вопроса

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