0

我无法使用正则表达式从预定义的输入字符串中提取(双)数字。
字符串是:

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

为了成功解析我需要+在保持可选的同时抑制前导的数字-。另外我必须切断"数字之前/之后。

当然,我可以进行多步字符串操作,但有谁知道如何使用一个正则表达式以更优雅的方式完成所有操作?

到目前为止我尝试了什么:

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]+ # 十进制数字,至少一位
(?: # 开始非捕获组
  , # 小数点(德文格式)
  [0-9]+ # 十进制数字,至少一位
) # 结束非捕获组,设为可选

请注意,此表达式使小数部分(逗号后)可选,但不匹配输入,如-,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 回答