带连字符的Java正则表达式

时间:2010-12-17 23:20:58

标签: java regex

我需要在一个看起来像这样的文件中匹配和解析数据:

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 个答案:

答案 0 :(得分:7)

看起来很正确。 你的行中可能包含奇怪的东西。寻找一些额外的空格和换行符。

试试这个:

final Matcher m = p.matcher(this.currentLine.trim());

答案 1 :(得分:4)

您是否尝试将-转发为\\-

答案 2 :(得分:3)

它应该工作。确保没有不可见的字符,每行修剪一下。您可以将代码细化为:

final String patternStr = "(\\d{4})-(\\d{1})-(\\d{2})-(\\d{3})-(\\d{1})-(\\d{6})";

答案 3 :(得分:1)

数据中有空格

 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+)";