我需要正则表达式的帮助,以从缺少小数的字符串中提取数字。

Input
2 4.0 6.0 7 8 4.60

Output
2 7 8


编辑:关于Regex和Java的另一个后续问题。可以说我想添加一些东西(我真正想要的是将2 4.0 7.5转换为2.0 4.0 7.5,这意味着将缺失的.0添加到不带小数的部分中),我将如何做并且仍然保持与String相同的原样?

最佳答案

对于第二个问题:-

这是您的第二个要求的解决方案:-

String str = "2 4.0 6.0 7.5 8 4.60";
str = str.replaceAll("(?<=^|[ ])(\\d+)(?=$|[ ])", "$1.0");

System.out.println(str);  // Prints 2.0 4.0 6.0 7.5 8.0 4.60




对于第一个问题:-

您可以使用此正则表达式:-

(?<=^|[ ])(\\d+)(?=$|[ ])


这将匹配任何digits序列,后跟space。另外,它使用^$匹配字符串末尾的数字。

这是实现:-

    String str = "2 4.0 6.0 7 8 4.60";
    Pattern pattern = Pattern.compile("(?<=^|[ ])(\\d+)(?=[$ ])");

    Matcher matcher = pattern.matcher(str);

    while (matcher.find()) {
        System.out.print(matcher.group(1) + " ");
    }


输出:-

2 7 8

09-09 22:17
查看更多