簡體   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