3 回答
TA贡献1772条经验 获得超5个赞
您可以编写一个不需要交替的正则表达式,并且只能拥有一个您可以唯一访问的组以获取值,如果您使用积极的环顾四周来使用此正则表达式捕获您的预期值,则效果会更好,
(?<=[([])[^()[\]]*(?=[)\]])
解释:
(?<=[([])- 正面看后面确保前面的字符是(或者[
[^()[\]]*- 匹配除左括号或右括号外的任何字符
(?=[)\]])- 积极向前看,以确保它匹配)或]
演示
示例 Java 代码,
String s = "Example_(xxxxx)_AND_(yyyyy)_2019-01-28";
Pattern p = Pattern.compile("(?<=[(\\[])[^()\\[\\]]*(?=[)\\]])");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
印刷,
xxxxx
yyyyy
或者,就像我上面提到的那样,您可以使用这个非环顾正则表达式并仅捕获 group1 来获取您的内容,因为这个正则表达式没有任何交替,因此只有一个组。
[([]([^()[\]]*)[)\]]
没有环视正则表达式的演示
带有非环视正则表达式的示例 Java 代码,您需要在其中捕获使用group(1)
String s = "Example_(xxxxx)_AND_(yyyyy)_2019-01-28";
Pattern p = Pattern.compile("[(\\[]([^()\\[\\]]*)[)\\]]");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
印刷,
xxxxx
yyyyy
TA贡献1877条经验 获得超1个赞
这是一个完整的例子。
public class ExtractContentExample {
private static final Pattern PATTERN2 = Pattern.compile("^[^\\(]{0,}\\(|([\\)][^\\(\\)]{1,}[\\(])|\\)[^\\)]{0,}$");
public void test22212 () {
String[] split = PATTERN2.split("(I )Comparison_(am )_AND_(so )_2019-01-28Comparison_(handsome!)");
for (int i = 0; i< split.length; i++) {
if (split[i] != null && !split[i].isEmpty()) {
System.out.println(split[i]);
}
}
}
}
我希望这个能帮上忙
添加回答
举报