web-dev-qa-db-fra.com

Modèle pour extraire le texte entre parenthèses

Comment extraire une chaîne de "(" et ")" en utilisant la correspondance de motifs ou quoi que ce soit. Par exemple, si le texte est `

"Bonjour (Java)"

Alors comment obtenir seulement "Java".

Merci.

15
user1182217

Essaye ça:

 String x= "Hello (Java)";
 Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x);
while(m.find()) {
    System.out.println(m.group(1));
}

ou

String str = "Hello (Java)";
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")"));
50
Rahul Tripathi
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("\\((.*?)\\)");
Matcher regexMatcher = regex.matcher("Hello This is (Java) Not (.NET)");

while (regexMatcher.find()) {//Finds Matching Pattern in String
   matchList.add(regexMatcher.group(1));//Fetching Group from String
}

for(String str:matchList) {
   System.out.println(str);
}

SORTIE

Java
.NET

Que signifie \\((.+?)\\)?

Ce modèle d'expression régulier commencera à partir de \\( Qui correspondra à ( Tel qu'il est réservé dans regExp, nous devons donc échapper ce caractère, même chose pour \\) Et (.*?) correspondra à n'importe quel caractère zéro ou plus de temps n'importe quoi de plus dans () considéré comme groupe que nous trouvons.

26
CoderCroc

Je sais que cela a été posé il y a 3 ans, mais pour quiconque ayant la même question/similaire qui atterrit ici (comme je l'ai fait), il y a quelque chose de plus simple que d'utiliser l'expression régulière:

String result = StringUtils.substringBetween(str, "(", ")");

Dans votre exemple, result serait retourné comme "Java". Je recommanderais la bibliothèque StringUtils pour différents types de manipulation de chaîne (relativement simple); il gère automatiquement des choses comme les entrées nulles, ce qui peut être pratique.

Documentation pour substringBetween (): https://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/StringUtils.html#substringBetween-Java.lang.String-Java. lang.String-Java.lang.String -

Il existe deux autres versions de cette fonction, selon que les délimiteurs d'ouverture et de fermeture sont identiques et que le ou les délimiteurs se produisent plusieurs fois dans la chaîne cible.

5
Yury