正则表达式匹配以空格分隔的数字值,但整个字符串不以空格结尾



我实现了一个EditText,它允许输入用空格分隔的价格。价格可以是整数值也可以是十进制值。

例如:

3900 156.2 140.38 200 10

因此,我找到了以下正则表达式:

(d+([.]d{1,2})? )+

但它只适用于结尾的一个空格。(我知道这是完全可以预料的(

有可能让这个正则表达式忽略输入字符串末尾的空格吗?

或者你可以建议其他人吗?

谢谢。

我建议采用以下模式:

^d+(?:.d+)?(?:s+d+(?:.d+)?)*$

在通俗英语中,这意味着匹配一个(可能(十进制数字,后面跟着一个或多个空白字符,以及另一个(可能性(十进制数字(发生零次或多次(。

看看下面的演示链接。

演示

但既然您使用的是Java,我可以在这里提出一个替代方案。由于您可能必须访问每个数字,因此可以将来自EditText的字符串按空格分隔,然后检查每个"数字"以确保它确实是一个数字。类似这样的东西:

String input = "3900 156.2 140.38 200 10";
String[] nums = input.split("\s+");
for (String num : nums) {
if (num.matches("\d+(?:\.\d+)?")) {
// then process this as a number
}
}

您也可以使用(几乎(您提供的相同模式:

(d+([.]d{1,2})? )*(d+([.]d{1,2})?)

这不如Tim的答案灵活(比如:如果你在数字之间放一个以上的空格,它就会失败,等等(,但无论如何它都可能有用。

最新更新