0
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)」を別のグループにキャプチャしたいと考えています。

4

3 に答える 3

0

エラーは、予想される括弧の前に余分な\\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)'
于 2012-09-24T15:41:40.460 に答える
0

正規表現の途中に、次の部分があります。

\\s+)\\s+

必要な 2 つの連続したスペースを探しています。これは存在しないため、正規表現は失敗します。

于 2012-09-24T15:41:47.990 に答える
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");
于 2012-09-24T15:48:56.587 に答える