0

正規表現を使用して、定義済みの入力文字列から (倍精度の) 数値を抽出できません。
文字列は次のとおりです。

String inputline ="Neuer Kontostand";"+2.117,68";

+数値だけを正常に解析するには、オプションを維持しながら先頭を抑制する必要があります-"さらに、番号の前後を切り取らなければなりません。

もちろん、複数ステップの文字列操作を行うこともできますが、1 つの正規表現を使用してより洗練された方法ですべてを行う方法を知っている人はいますか?

私がこれまでに試したこと:

Pattern p = Pattern.compile("-{0,1}[0-9.,]*");
Matcher m = p.matcher(inputline);
String substring =m.group();
4

2 に答える 2

4
Pattern.compile("-?[0-9]+(?:,[0-9]+)?")

説明

-? # オプションのマイナス記号
[0-9]+ # 10 進数、少なくとも 1 桁
(?: # 非キャプチャ グループの開始
  , # 小数点 (ドイツ形式)
  [0-9]+ # 10 進数、少なくとも 1 桁
) # 非キャプチャ グループを終了し、オプションにします

この式は小数部分 (コンマの後の部分) をオプションにしますが、 のような入力には一致しないことに注意してください-,01

予想される入力に常に両方の部分 (コンマの前後) がある場合は、より単純な式を使用できます。

Pattern.compile("-?[0-9]+,[0-9]+")
于 2013-04-09T06:31:55.587 に答える
0
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumRegEx {

   public static void main( String[] args ) {
      String inputline = "\"Neuer Kontostand\";\"+2.117,68\"";
      Pattern p = Pattern.compile(".*;\"(\\+|-)?([0-9.,]+).*");
      Matcher m = p.matcher( inputline );
      if( m.matches()) { // required
         String sign  = m.group( 1 );
         String value = m.group( 2 );
         System.out.println( sign );
         System.out.println( value );
      }

   }
}

出力:

+
2.117,68
于 2013-04-09T06:27:47.643 に答える