字符串的正则表达式
问题描述:
我需要使用正则表达式从字符串中获取一些值。事情是,这对我来说很复杂。字符串的正则表达式
例如我有一个字符串是这样的:
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
答
我会做这样的,在只有一行:
String[] words = str.replaceAll(".*\\[|\\].*", "").split(", ");
第一replaceAll()
呼叫剥掉前导和尾随包装,以及split()
分解了剩下的单词。
+0
@AvinashRaj不,但这不是问题。请注意,只需稍作修改即可 – Bohemian 2014-11-06 13:11:05
答
你可以试试下面的正则表达式和组索引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
答
您应该使用此字符串。
字符串[]字= str.replaceAll(| “ ”\ [\]。“”).split( “”);
希望它有帮助。
答
您可以使用方法拆分轻松完成。
String string = [first, second, third];
String[] parts = string.split(",");
String part1 = parts[0]; // first
String part2 = parts[1]; // second
String part3 = parts[2]; // third
如果它不适合你,请告诉我,我将调试你的正则表达式。
如果输入是'oneWord [first,second,third] foo bar [foobar]',那么您的预期输出是什么? – 2014-11-06 13:12:28