2014-11-06 165 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 

如果它不适合你,请告诉我,我将调试你的正则表达式。