我想编写匹配表达式来从大字符串中读取括号()之间的字符串。例如:大字符串是: -
(something), (something2), (something3)
如何为此编写匹配表达式以读取组中的内容,某事物2,某事物3。
答案 0 :(得分:1)
您不能一次性阅读所有这些群组,而是使用Matcher#find()
这个表达式,您可能会读到这些:\(([^\(\)]*)\)
(读取:匹配必须以(
开头,必须包含任何不属于(
或)
的字符数 - 这些字符组成了您的组 - 并且必须以)
结尾。
请注意,括号中的转义不是必需的,但为了保持一致性,因为它们是在外面需要的。
Pattern p = Pattern.compile("\\(([^\\(\\)]*)\\)");
Matcher m = p.matcher( "(something), (something2), (something3)" );
while(m.find())
{
System.out.println(m.group( 1 ));
}
打印:
something
something2
something3
答案 1 :(得分:1)
你可以用一行读出所有的东西:
String[] somethings = input.replaceAll("(^.?*\\(|\\)[^\\(]*$)", "").split("\\).*?\\(");
这是一些测试代码:
public static void main(String... args) throws InterruptedException {
String input = "foo (something1) (something2), blah (something3) bar";
String[] somethings = input.replaceAll("(^[^\\(]*\\(|\\)[^\\(]*$)", "").split("\\).*?\\(");
System.out.println(Arrays.toString(somethings));
}
输出:
[something1, something2, something3]
答案 2 :(得分:0)
以下程序将获得所需的输出
public class RegexTestStrings {
public static final String EXAMPLE_TEST = "(something),(something2),(something3)";
public static void main(String[] args) {
String[] splitString = (EXAMPLE_TEST.split("\\("));
System.out.println(splitString.length);
for (String string : splitString) {
System.out.println(string.replace(")",""));
}
}
}
首先,它将所有内容从(
开始拆分,然后将)
替换为""
,以便输出为:
something,
something2,
something3