2016-04-27 15 views
0

Ich bin neu in regulären Ausdrücken. Ich möchte nach NUMBER(19, 4) suchen und die Methode sollte den Wert zurückgeben (in diesem Fall 19,4). Aber ich bekomme immer 0 als Ergebnis!Regulärer Ausdruck Parse Double

 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

Ihr Muster ist "NUMBER" gefolgt von '(', gefolgt von Ziffern, gefolgt von Komma, gefolgt von Leerzeichen. Aber Sie versuchen, etwas, das Dinge, die keine Leerzeichen nach dem Komma sind – RealSkeptic

Antwort

2

Sie fehlen die Übereinstimmung der Ziffern nach dem Komma.
Sie müssen auch nicht die , entkommen. verwenden:

"^NUMBER\\((\\d+),\\s*(\\d+)\\)$" 

Dies wird Ihnen die erste Nummer in group(1) und die zweite Zahl in group(2).

Es ist jedoch ziemlich streng auf die Felder, so können Sie, indem Sie diese auf Werte wie " NUMBER (19 , 4) " milderen und Begegnung: Sie werden Ihre startsWith

"^\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$" 

In diesem Fall und nur die Drop verwenden müssen Regex direkt. Außerdem können Sie die Anker (^$) entfernen, wenn Sie find() zu matches() ändern.

Seit NUMBER(19) ist normalerweise auch erlaubt. Sie können den zweiten Wert optional machen:

"\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*(?:,\\s*(\\d+)\\s*)?\\)\\s*" 

group(2) wird dann wieder null wenn die zweite Zahl ist nicht gegeben.

Siehe regex101 for demo.


Beachten Sie, dass Ihr Code nicht kompiliert.
Ihre Methode gibt eine double zurück, aber length ist eine int.

Obwohl 19,4 wie eine Gleitkommazahl aussieht, ist es nicht, und es als solches darzustellen, ist falsch.
Sie sollten die zwei Werte getrennt speichern.

+0

danke für die Regex101 .com Website! Das ist eine große Hilfe! – Hammelkeule