Java的Matcher.group(int)方法如何避免匹配括号内子括号的内容

问题描述 投票:0回答:1

我有一个类似的字符串

String str = "美国临时申请No.62004615";

和类似的正则表达式

String regex = "(((美国|PCT|加拿大){0,1})([\\u4E00-\\u9FA5]{1,8})((NO.|NOS.){1})([\\d]{5,}))";

其他代码是

 Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.out.println("1:"+matcher.group(1)+"\n"
                +"2:"+matcher.group(2)+"\n"
                +"3:"+matcher.group(3)+"\n"
                +"4:"+matcher.group(4)+"\n"
                +"5:"+matcher.group(5)+"\n"
                +"6:"+matcher.group(6)+"\n"
                +"7:"+matcher.group(7));
    }

我知道括号()用于启用正则表达式词组。第一组是大组。

第二组是((美国| PCT |加拿大){0,1})以匹配“美国”或“ PCT”或“加拿大”。第三组是([\ u4E00- \ u9FA5] {1,8})以匹配长度为1到8的汉字。第四组是((NO。| NOS。){1})以匹配NO。或NOS。第五组是([\ d] {5,})以匹配数字但是控制台是
1:美国临时申请No.62004615 2:美国 3:美国 4:临时申请 5:No. 6:No. 7:62004615

组(2)与组(3)相同。组(5)与组(6)相同] >>似乎组(3)再次重新匹配了括号内的子括号。我想知道是否有办法只匹配最外面的括号。理想的结果应该是

1:美国临时申请No.62004615 2:美国  3:临时申请 4:No. 5:62004615

我有一个字符串,如String str =“美国临时申请No.62004615”;还有正则表达式,例如String regex =“((((美国| PCT |加拿大){0,1})([\\ u4E00-\\ u9FA5] {1,8})((NO。| NOS。{1} )([\\ d] {5,}))“;其他代码是模式...

java regex-group matcher
1个回答
2
投票

听起来好像您想要一个非捕获

© www.soinside.com 2019 - 2024. All rights reserved.