Регулярное выражение Java с дефисом - PullRequest
5 голосов
/ 18 декабря 2010

Мне нужно сопоставить и проанализировать данные в файле, который выглядит следующим образом:

4801-1-21-652-1-282098
4801-1-21-652-2-282098
4801-1-21-652-3-282098
4801-1-21-652-4-282098
4801-1-21-652-5-282098

но шаблон, который я написал ниже, похоже, не работает. Может кто-нибудь помочь мне понять, почему?

final String patternStr = "(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)";
final Pattern p = Pattern.compile(patternStr);

while ((this.currentLine = this.reader.readLine()) != null) {
    final Matcher m = p.matcher(this.currentLine);
    if (m.matches()) {
        System.out.println("SUCCESS");
    }
}

Ответы [ 4 ]

7 голосов
/ 18 декабря 2010

выглядит правильно. Возможно, что-то странное заключено в ваших строках. Ищите несколько лишних пробелов и разрывов строк.

Попробуйте это:

final Matcher m = p.matcher(this.currentLine.trim());
5 голосов
/ 18 декабря 2010

Вы пытались избежать - как \\-?

3 голосов
/ 18 декабря 2010

должно работать. Убедитесь, что нет невидимых символов, вы обрезайте каждую строку. Вы можете уточнить код как:

final String patternStr = "(\\d{4})-(\\d{1})-(\\d{2})-(\\d{3})-(\\d{1})-(\\d{6})";
1 голос
/ 18 декабря 2010

В данных есть пробел

 4801-1-21-652-1-282098
 4801-1-21-652-2-282098
 4801-1-21-652-3-282098
 4801-1-21-652-4-282098
 4801-1-21-652-5-282098

final String patternStr = "\\s*(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...