2014-06-17 80 views
11

如何使用模式匹配或其他方式從"("")"中提取字符串。例如,如果文字是'在括號之間提取文本的模式

「你好(Java)」 一

,那麼如何才能只得到"Java"

謝謝。

+1

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

+5

你到目前爲止嘗試過什麼?你想用嵌套括號發生什麼,例如「你好(Foo和(Bar))」?具有多個括號值的情況如何,比如「Hello(Foo)和(Bar)」? –

回答

35

試試這個:

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

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

@rupinderjeet你和給予+1的兩個人應該在寫出/支持這樣的評論之前檢查答案的日期和時間。 – 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); 
} 

輸出

Java 
.NET 

\\((.+?)\\)是什麼意思?

這正則表達式模式將從\\(開始,因爲它是在正則表達式保留將匹配(所以我們需要擺脫這種性格,同樣的事情\\)(.*?)將在()視爲集團而且匹配任何字符零次或更多的時間什麼我們正在尋找。

+1

如何在Expression [「1」,「5」,「7」]中獲取字符串。結果應該是「1」,「5」和「7」。我們應該像這樣使用:'Pattern regex = Pattern.compile(「\\ [(。*?)\\]」);' – user1182217

+0

@ user1182217您可以使用'Pattern regex = Pattern.compile(「(\」。*? \「)」);'並用matcher獲取grop 1. –

+1

投票解釋(y) – vicky

2

我知道這是問3年前,但對於具有相同/相似的問題,即土地在這裏(像我一樣)的人,有什麼比使用正則表達式更簡單:

​​

在你的榜樣,result將作爲「Java」返回。我會推薦用於各種(相對簡單的)字符串操作的StringUtils庫;它自動處理空輸入等事情,這可以方便。

的文檔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-

還有其他兩個版本此功能,取決於打開和關閉定界符是否相同,以及分隔符(或多個)是否發生在(多個)目標字符串多次。

相關問題