我实现了一个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的答案灵活(比如:如果你在数字之间放一个以上的空格,它就会失败,等等(,但无论如何它都可能有用。