我正在编写正则表达式以匹配我从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();
}
答案 0 :(得分:0)
它应该像这样工作:
^( *-?\d(\.?\d+)? *)*$
这是减号一次或根本没有,后跟一个由至少1位数组成的数字。
此外,如果您有double
个值,它将捕获点前的第一组数字,然后检查数字中的点后面是否至少有一位数。
获取一条行,其中包含多个空格,数字,空格,无论多少次。