正则表达式解析双

时间:2016-04-27 12:57:31

标签: java

我是正则表达式的新手。我想搜索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;
    }

1 个答案:

答案 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

请参阅regex101 for demo

请注意,您的代码无法编译 您的方法返回double,但lengthint

虽然19,4看起来像一个浮点数,但它不是,并且表示它是错误的 您应该分别存储这两个值。