繁体   English   中英

正则表达式解析双精度

[英]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

有关演示,请参见regex101


请注意,您的代码无法编译。
您的方法返回一个double ,但是length是一个int

尽管19,4看起来像一个浮点数,但实际上不是,并且如此表示是错误的。
您应该分别存储两个值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM