我需要使用正则表达式从String中获取一些值。事情是,对我来说这很复杂。
例如,我有一个这样的字符串:
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 :(得分:4)
我会这样做,只需一行:
String[] words = str.replaceAll(".*\\[|\\].*", "").split(", ");
第一个replaceAll()
调用会剥离前导和尾随包装,而split()
会将剩下的内容拆分为单独的单词。
答案 1 :(得分:2)
您可以尝试下面的正则表达式,并从组索引1中获取您想要的单词。
(?:\[|(?<!^)\G),? *(\w+)(?=[^\[\]]*\])
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
答案 2 :(得分:0)
你应该使用这个字符串。
String [] words = str.replaceAll(&#34;。 \ [| \]。&#34;,&#34;&#34;)。split(&#34 ;,&#34;);
希望它有所帮助。
答案 3 :(得分: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
如果它不适合你,请告诉我我将调试你的正则表达式。