Java регулярное выражение для вставки текста между фигурными скобками
У меня есть строка
a = "stringWithBraces()"
Я хочу создать следующую строку
"stringWithBraces(text)"
Как мне добиться этого с помощью регулярных выражений?
Я попробовал это:
a.replaceAll("\\(.+?\\)", "text");
Но получите это:
stringWithBraces()
4 ответа
Вы можете использовать lookaheads и сделать что-то вроде этого:
(?<=\().*?(?=\))
Таким образом, делая это:
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)"
если это то, что вы хотите достичь в соответствии с моим пониманием вопроса