Java编号正则表达式工作,但不匹配?

时间:2016-02-21 14:45:38

标签: java regex

我正在编写正则表达式以匹配我从esri ascii文件中读取的任何数值。通常,这些值以每行上的空格开头(必须排除),然后是其他值,每个值用空格分隔。

我已经提出了以下正则表达式,它匹配并在RegExr中运行但不知何故它似乎与我程序中的任何一行都不匹配。

来自esri文件的示例输入如下所示:

" -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -340.86"
" -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -591.87"

用于捕获这些值的正则表达式为:[^\s]-*\d.*

如果你们能帮我解决这个问题,我将非常感激!

代码:

//Pattern to match the headers of the esri file
Pattern header = Pattern.compile( "^(\\w+)\\s+(-?\\d+(.\\d+)?)");

BufferedReader input = null;
try 
{
    input = new BufferedReader( new FileReader( filename ) );

    while( input.ready() )
    {
        String line = input.readLine();
        Matcher headMatch = header.matcher( line );

        //Match all the heads
        if( headMatch.matches() ) {...}

        else if( line.matches( "[^\\s]-*\\d.*" ))
        {
           //process data, but this gets skipped..
           String[] inData = line.split("\\s+");
           ...
        }
     }
     ...
} catch (Exception e){
    e.printStackTrace();
} finally {
    input.close();
}

1 个答案:

答案 0 :(得分:0)

它应该像这样工作:

^( *-?\d(\.?\d+)? *)*$

这是减号一次或根本没有,后跟一个由至少1位数组成的数字。

此外,如果您有double个值,它将捕获点前的第一组数字,然后检查数字中的点后面是否至少有一位数。

获取一条行,其中包含多个空格,数字,空格,无论多少次。