2014-11-06 163 views
3

我需要使用正則表達式從字符串中獲取一些值。事情是,這對我來說很複雜。字符串的正則表達式

例如我有一個字符串是這樣的:

oneWord [first, second, third] 

我的輸出應爲:

first 
second 
third 

所以我需要的話,其是間[和]。另外,[]之間可以有不同數量的單詞。

使用一些正則表達式的創造者嘗試,但不是很準確:

String re1=".*?"; // Non-greedy match on filler 
String re2="(?:[a-z][a-z]+)"; // Uninteresting: word 
String re3=".*?"; // Non-greedy match on filler 
String re4="((?:[a-z][a-z]+))"; // Word 1 
String re5=".*?"; // Non-greedy match on filler 
String re6="((?:[a-z][a-z]+))"; // Word 2 
String re7=".*?"; // Non-greedy match on filler 
String re8="((?:[a-z][a-z]+))"; // Word 3 
+0

如果輸入是'oneWord [first,second,third] foo bar [foobar]',那麼您的預期輸出是什麼? – 2014-11-06 13:12:28

回答

4

我會做這樣的,在只有一行:

String[] words = str.replaceAll(".*\\[|\\].*", "").split(", "); 

第一replaceAll()呼叫剝掉前導和尾隨包裝,以及split()分解了剩下的單詞。

+0

@AvinashRaj不,但這不是問題。請注意,只需稍作修改即可 – Bohemian 2014-11-06 13:11:05

2

你可以試試下面的正則表達式和組索引1

(?:\[|(?<!^)\G),? *(\w+)(?=[^\[\]]*\]) 

DEMO得到你想要的話

Java的正則表達式將是

(?:\\[|(?<!^)\\G),? *(\\w+)(?=[^\\[\\]]*\\]) 

實施例:

String s = "oneWord [first, second, third] foo bar [foobar]"; 
Pattern regex = Pattern.compile("(?:\\[|(?<!^)\\G),? *(\\w+)(?=[^\\[\\]]*\\])"); 
Matcher matcher = regex.matcher(s); 
while(matcher.find()){ 
     System.out.println(matcher.group(1)); 
} 

輸出:

first 
second 
third 
foobar 
0

您應該使用此字符串。

字符串[]字=​​ str.replaceAll(| 「 」\ [\]。「」).split( 「」);

希望它有幫助。

0

您可以使用方法拆分輕鬆完成。

String string = [first, second, third]; 
String[] parts = string.split(","); 
String part1 = parts[0]; // first 
String part2 = parts[1]; // second 
String part3 = parts[2]; // third 

如果它不適合你,請告訴我,我將調試你的正則表達式。