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

时间:2018-07-17 14:08:30

标签: java regex android-edittext

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

例如:

  

3900 156.2 140.38 200 10

因此,我发现了以下正则表达式:

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

但是它只能在末尾使用空格。 (我知道这绝对是可以预期的)

是否可以使此正则表达式忽略输入字符串末尾的空格?

或者您可以提出其他建议吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

我建议采用以下模式:

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

简而言之,这表示要匹配一个(可能)十进制数字,然后匹配一个或多个空格字符,以及另一个(可能)十进制数字,该零次或多次出现。

看看下面的演示链接。

Demo

但是,由于您使用的是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
    }
}

答案 1 :(得分:0)

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

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

这没有蒂姆的答案灵活(例如:如果在数字之间放置一个以上的空格,它将失败,等等),但是反正还是有用的。