0

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

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 添加到没有小数的那些),我将如何做到这一点并且仍然保持我的字符串不变的东西?

4

3 回答 3

3

与罗伯特哈维的评论一起,我会用空格分割它,然后迭代结果以寻找“。”。它比使用正则表达式更容易阅读和维护。

string[] splitStr = "2 4.0 6.0 7 8 4.60".split(' '); 
foreach(string s in splitStr){
   if(false == s.Contains("."))
       //do something
}
于 2012-11-29T17:14:30.077 回答
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
于 2012-11-29T17:11:13.870 回答
0

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

于 2012-11-29T17:21:46.733 回答