String input = "2012 AL REG TEXT 300535(NS)";
String regex = "^((\\d{4})\\s+)?((\\S+)\\s+(.+?)\\s+)\\s+((\\S+)(\\s+\\(.*?\\)))$";
我想在一个组中捕获2012,在另一组中捕获“AL REG TEXT”,在另一组中捕获“300535(NS)”。
答案 0 :(得分:0)
错误是你在预期的parantheses之前有一个额外的\\s+
,并且正如@cmonkey指出的那样,在中间有一个额外的\\s+
。删除这些,它的工作原理。另外,要仅获取上面提到的群组,请将?:
添加到您不想捕获的群组中:
String input = "2012 AL REG TEXT 300535(NS)";
String regex = "^(?:(\\d{4})\\s+)?((?:\\S+)\\s+(?:.+?))\\s+((?:\\S+)(?:\\(.*?\\)))$";
Matcher m = Pattern.compile(regex).matcher(input);
if (m.matches()) {
for (int i = 1; i <= m.groupCount(); i++) {
System.out.format("Group %d: '%s'%n", i, m.group(i));
}
}
打印
Group 1: '2012'
Group 2: 'AL REG TEXT'
Group 3: '300535(NS)'
答案 1 :(得分:0)
在正则表达式的中间,有一部分:
\\s+)\\s+
正在寻找两个必需的连续空格。这不存在,因此正则表达式失败。
答案 2 :(得分:0)
试试这个:^(\\d{4})?\\s+(\\D+)\\s+(\\d.*)$
以下是代码:
String input = "2012 AL REG TEXT 300535(NS)";
String regex = "^(\\d{4})?\\s+(\\D+)\\s+(\\d.*)$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if(m.matches()) {
System.out.println("Group count: "+m.groupCount());
for(int i=0; i<=m.groupCount(); i++) {
System.out.println("Group "+i+": "+m.group(i));
}
}
else System.out.println("No match");