字符串的正则表达式

时间:2014-11-06 12:59:18

标签: java regex string

我需要使用正则表达式从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

4 个答案:

答案 0 :(得分:4)

我会这样做,只需一行:

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

第一个replaceAll()调用会剥离前导和尾随包装,而split()会将剩下的内容拆分为单独的单词。

答案 1 :(得分: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

答案 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

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