2017-04-21 3 views
-2

J'ai une chaîneJava regex pour insérer du texte entre accolades

a = "stringWithBraces()" 

Je veux créer la chaîne suivante

"stringWithBraces(text)" 

Comment puis-je obtenir cela en utilisant regex?

J'ai essayé ceci:

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

Mais ça:

stringWithBraces() 
+3

'+' doit correspondre à au moins une fois, vous devez utiliser '* '. – Vallentin

+0

voulez-vous dire que vous voulez réaliser quelque chose comme: String first = "(abc)"; String myVariable = "def"; devenir String first = "abc (def)"? – Yahya

+2

Pourquoi ne pas utiliser un remplacement littéral? '.replace ("() "," ("+ text +") ")'? Notez qu'il n'y a rien de mal avec le "" ("+ text +") "'. –

Répondre

0

Vous pouvez utiliser ceci:

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

Vous devez remplacer tout entre parenthèses avec (text)

+0

hmm J'essayais d'éviter "(" + variable + ")" –

+0

qu'as-tu voulu dire @user_mda? –

+0

'texte' dans ma question est une variable. Donc, je ne voulais pas ajouter "(" + variable + ")" mais juste remplacer ce qui est entre les accolades avec la variable –

0

Vous pouvez utiliser lookaheads et faire quelque chose comme ceci:

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

Live Demo

faisant ainsi ceci:

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

System.out.println(a); 

Sorties:

stringWithBraces(text) 

Notez que par rapport à replaceAll() alors la chaîne replacement a s un caractère spécial. Donc, vous devriez probablement utiliser Matcher.quoteReplacement() afin d'échapper à ceux-ci et être en sécurité.

+0

Notez que le "texte" est en fait une variable. Et une variable de chaîne peut contenir des caractères spéciaux qui sont traités spécifiquement dans un modèle de remplacement. –

+0

@ WiktorStribiżew merci oublié à ce sujet. C'est corrigé maintenant. – Vallentin

0

Qu'en est celui-ci:

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); 

cela change

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

si ce que vous voulez réaliser selon ma compréhension à la question

0

+ nécessite au moins un char, le ? ajouté ici signifie la correspondance la plus courte, donc "... (.) ... (.) ..." ne continuerait pas à trouver ".) ... (.".

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

Vous avez peut-être prévu replaceFirst; bien que je ne le pense pas.

Vous pouvez également laisser le point . nouveaux caractères de ligne de match, pour les matches mult en ligne, en utilisant l'option DOT_ALL (?s):

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