[英]Regular Expression Parse Double
我是新来的正则表达式。 我想搜索NUMBER(19, 4)
19,4
),该方法应返回值(在本例中为19,4
)。 但是我总是得到0
!
int length =0;
length = patternLength(datatype,"^NUMBER\\((\\d+)\\,\\s*\\)$","NUMBER");
private static double patternLengthD(String datatype, String patternString, String startsWith) {
double length=0;
if (datatype.startsWith(startsWith)) {
Pattern patternA = Pattern.compile(patternString);
Matcher matcherA = patternA.matcher(datatype);
if (matcherA.find()) {
length = Double.parseDouble(matcherA.group(1));
}
}
return length;
}
您缺少逗号后的数字匹配。
你也不必逃避,
。 用这个:
"^NUMBER\\((\\d+),\\s*(\\d+)\\)$"
这将为您提供group(1)
的第一个数字和group(2)
的第二个数字。
但是,它对空格非常严格,因此您可以使用以下方法来宽大一些,并匹配" NUMBER ( 19 , 4 ) "
这样的值:
"^\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$"
在这种情况下,您将必须删除startsWith
并直接使用正则表达式。 另外,如果将find()
更改为matchs(),则可以删除锚点( ^$
matches()
。
由于通常也允许NUMBER(19)
。 您可以将第二个值设为可选:
"\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*(?:,\\s*(\\d+)\\s*)?\\)\\s*"
如果未提供第二个数字,则group(2)
将返回null
。
请注意,您的代码无法编译。
您的方法返回一个double
,但是length
是一个int
。
尽管19,4
看起来像一个浮点数,但实际上不是,并且如此表示是错误的。
您应该分别存储两个值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.