【问题标题】:Extract number from string using regex in java在java中使用正则表达式从字符串中提取数字
【发布时间】:2023-04-07 12:41:02
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 用括号 ([0-9.,]*) 将要提取的部分作为组括起来
  • 1. {0,1}可以写成?; 2. 你的正则表达式会匹配很多不是数字的东西(例如-... 甚至是空白字符串)。

标签: java regex function debugging parsing


【解决方案1】:
Pattern.compile("-?[0-9]+(?:,[0-9]+)?")

解释

-? # 一个可选的减号 [0-9]+ # 十进制数字,至少一位 (?: # 开始非捕获组 , # 小数点(德文格式) [0-9]+ # 十进制数字,至少一位 ) # 结束非捕获组,设为可选

请注意,此表达式使小数部分(逗号后)可选,但与 -,01 等输入不匹配。

如果您的预期输入 总是 包含两个部分(逗号之前和之后),您可以使用更简单的表达式。

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

【讨论】:

  • 这样更好,但不能解决 OP 没有在任何地方 使用 正则表达式的问题 :)
  • @Tim 那是……好吧。不是问题的一部分。 ;)
  • 嗯,不是真的。 OP仅表示他未能正确提取数字。他的正则表达式起作用(在某种程度上),但他从未使用过它。所以这是他的实际问题。
  • @Tim 关于 Java 正则表达式的大量使用示例,我想说的是,提及这一事实已经绰绰有余了。
  • 谢谢!这非常快,我的正则表达式现在可以正常工作。我仅将解决方案中的第一组扩展为 [0-9.] 以包含分组分隔符(德语格式)。在我多次尝试中,我的关键问题是在 [0-9] 之后使用星号而不是加号。非常感谢!
【解决方案2】:
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

【讨论】:

  • 仍然不起作用:+ 未转义(语法错误),无论如何都应该删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多