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)」。如何修復這個正則表達式?
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)」。如何修復這個正則表達式?
錯誤是,你有一個額外的\\s+
正好在預期的parantheses之前,作爲@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)'
在你的正則表達式的中間,有一部分:
\\s+)\\s+
這是尋找兩個必需的連續空格。這不存在,所以正則表達式失敗。
試試這個:^(\\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");
太少的信息:什麼是你想要抓住的模式,能有多大,他們偏離。你面臨的問題是什麼? –
和什麼是錯誤? – njzk2
它總是處於上述輸入格式。我試圖捕捉一組4個數字,這是一年,然後是「AL REG TEXT」格式的名稱,另一個數字如「300535(NS)」 – Phoenix