我是正则表达式的新手。我想搜索NUMBER(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;
}
答案 0 :(得分:2)
您在逗号后缺少数字匹配
你也不需要逃避,
。
使用此:
"^NUMBER\\((\\d+),\\s*(\\d+)\\)$"
这将为您提供group(1)
中的第一个号码和group(2)
中的第二个号码。
但是对空格来说相当严格,所以你可以使用它来更宽松并匹配像" NUMBER ( 19 , 4 ) "
这样的值:
"^\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$"
在这种情况下,您必须放弃startsWith
并直接使用正则表达式。此外,如果您将^$
更改为find()
,则可以删除定位点matches()
。
由于通常也允许NUMBER(19)
。您可以将第二个值设为可选:
"\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*(?:,\\s*(\\d+)\\s*)?\\)\\s*"
如果没有给出第二个号码, group(2)
将返回null
。
请注意,您的代码无法编译
您的方法返回double
,但length
是int
。
虽然19,4
看起来像一个浮点数,但它不是,并且表示它是错误的
您应该分别存储这两个值。