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