2010-12-17 61 views
5

我需要的,看起来像一个文件匹配和解析数据:Java正则表达式用连字符

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

回答

7

它看起来是正确的。 可能有些奇怪的东西在你的线条中。寻找一些额外的空间和换行符。

试试这个:

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

这正是最新的错 – 2010-12-17 23:26:21

4

您是否试过将-转义为\\-

+0

我做到了。我解决了它,它缺少空白。 – 2010-12-17 23:24:45

+0

啊哈,邪恶的无形的空白再次袭击:-) – 2010-12-17 23:25:36

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

@罗曼的答案也处理这个问题。 – 2010-12-17 23:26:40

3

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

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