提取没有小数的整数

时间:2012-11-29 17:10:13

标签: java regex

我需要Regex帮助从一个缺少小数的字符串中提取数字。

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添加到没有小数的那些),我该怎么做呢?保持我的字符串不变的东西?

3 个答案:

答案 0 :(得分:3)

与Robert Harveys评论一起,我会用空格分割它然后迭代结果寻找“。”。它更容易阅读和维护,而不是使用正则表达式。

string[] splitStr = "2 4.0 6.0 7 8 4.60".split(' '); 
foreach(string s in splitStr){
   if(false == s.Contains("."))
       //do something
}

答案 1 :(得分:2)

第二个问题: -

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

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

答案 2 :(得分:0)

我的版本:(?<![\.\d])\d+(?!\.\d+)