2014-06-17 30 views
11

Come estrarre la stringa da "(" e ")" utilizzando la corrispondenza del modello o altro. Per esempio, se il testo è `Schema per estrarre il testo tra parentesi

"Ciao (Java)"

Poi come ottenere solo "Java".

Grazie.

+1

Inizialmente proponendo 'indexOf': http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf%28int%29 – PeterMmm

+5

Che cosa hai provato fino ad ora? Che cosa vuoi che succeda con parentesi annidate, ad es. "Ciao (Foo e (Bar))"? Che dire delle situazioni con più valori di parentesi, come "Hello (Foo) e (Bar)"? –

risposta

35

Prova questo:

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

o

String str = "Hello (Java)"; 
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")")); 
+2

@rupinderjeet Tu ed i due ragazzi che danno +1 dovresti controllare la data e l'ora in cui sono state fornite le risposte prima di scrivere/supportare tali commenti. – aProgger

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

USCITA

Java 
.NET 

Che cosa significa \\((.+?)\\)?

Questo modello di espressione regolare partirà dalla \\( che corrisponderà ( quanto essa è riservata a RegExp così abbiamo bisogno di sfuggire a questo personaggio, stessa cosa per \\) e (.*?) corrisponderà qualsiasi carattere zero o più tempo nulla di più in () considerati come gruppo che stiamo trovando

+1

come ottenere stringhe nell'espressione ["1", "5", "7"]. Il risultato dovrebbe essere "1", "5" e "7". Dovremmo usare come: 'Pattern regex = Pattern.compile (" \\ [(. *?) \\] ");' – user1182217

+0

@ user1182217 Puoi usare 'Pattern regex = Pattern.compile (" (\ ". *? \ ")"); 'e usa il matcher per recuperare grop 1. –

+1

sul voto per la spiegazione (y) – vicky

2

So che questo è stato chiesto 3 anni fa, ma per tutti coloro che con la stessa domanda/simile che atterra qui (come ho fatto io), c'è qualcosa di ancora più semplice rispetto all'utilizzo di espressioni regolari:

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

Nel tuo esempio , result verrebbe restituito come "Java". Raccomanderei la libreria StringUtils per vari tipi di manipolazione di stringa (relativamente semplice); gestisce le cose come input nulli automaticamente, il che può essere conveniente.

documentazione per 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-

Esistono altre due versioni di questa funzione, a seconda che i delimitatori di apertura e chiusura sono uguali, e se il delimitatore (s) verificano (s) in target string più volte.

Problemi correlati