为了账号安全,请及时绑定邮箱和手机立即绑定

Java正则表达式提取方括号或圆括号内的内容

Java正则表达式提取方括号或圆括号内的内容

墨色风雨 2022-05-25 16:58:23
我正在尝试在方形或圆形中提取字符串。字符串可能只有方括号或圆括号我正在使用下面的正则表达式。Pattern p = Pattern.compile("\\[(.*?)\\]|\\((.*?)\\)");输出字符串也包括括号。下面是代码。String example = "Example_(xxxxx)_AND_(yyyyy)_2019-01-28";Pattern p = Pattern.compile("\\[(.*?)\\]|\\((.*?)\\)");Matcher m = p.matcher(example);while(m.find()) {    System.out.println(m.group(1));}上述模式给出的输出为(xxxxx)(年年)预期输出为xxxxx年年
查看完整描述

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


查看完整回答
反对 回复 2022-05-25
?
冉冉说

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]);

           }

       }

   }


}

我希望这个能帮上忙


查看完整回答
反对 回复 2022-05-25
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您可以使用前瞻和后视:-

(?<=\[).*?(?=\])|(?<=\().*?(?=\))

或者您可以将德摩根定律应用于上述正则表达式并使用:-

(?<=\[|\().*?(?=\]|\))

解释

(?<=\[|\()- 前面是[or (
.*?- 任意数量的字符,非贪婪
(?=\]|\))- 后面是]or)


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 240 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信