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

Java 正则表达式匹配由空格分隔的数字值,但整个字符串不匹配';不要以空格结尾,java,regex,android-edittext,Java,Regex,Android Edittext,我实现了一个EditText,它允许输入以空格分隔的价格。 价格可以是整数值和十进制数值 例如: 3900 156.2 140.38 200 10 因此,我找到了以下正则表达式: (\d+([.]\d{1,2})+ 但它只适用于末端的一个空格。(我知道这是完全可以预料的) 是否可以使此正则表达式忽略输入字符串末尾的空格 或者你可以向我推荐其他的 谢谢。我建议以下模式: ^\d+(?:\.\d+)?(?:\s+\d+(?:\.\d+)?)*$ 在简单的英语中,这表示匹配一个(可能的)十进制数,后

我实现了一个
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+)?(?:\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的答案灵活(例如:如果在数字之间放置多个空格,则会失败,等等),但无论如何它都可能有用。

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

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

这不如Tim的答案灵活(例如:如果在数字之间放置多个空格,它将失败,等等),但它可能还是有用的。

只需删除正则表达式中的空格即可
(\d+([.]\d{1,2})+
@karthikmanchala要更精确些,在
标记后面和
前面的空格。
…)如果解决了你的问题,你应该在其中一个答案上做正确的标记。@TimBiegeleisen我选择了Rafael的答案,因为它完全符合我的预期。我对你的建议投了更高的票,因为你提供了非常灵活的正则表达式,并提供了一个很好的解释,帮助我将你的正则表达式转换为我所需要的。希望我是对的。@Ivan我不知道。。。你说得对吗-只删除正则表达式中的空格
(\d+([.]\d{1,2})+
@karthikmanchala要更精确些,在
标记后面和
前面的空格。
…)如果解决了你的问题,你应该在其中一个答案上做正确的标记。@TimBiegeleisen我选择了Rafael的答案,因为它完全符合我的预期。我对你的建议投了更高的票,因为你提供了非常灵活的正则表达式,并提供了一个很好的解释,帮助我将你的正则表达式转换为我所需要的。希望我是对的。@Ivan我不知道。。。你说得对吗-PA数字之间的单个空格正是我想要的。谢谢。数字之间只有一个空格正是我想要的。谢谢。我真的很感谢你的回答。实际上,我想验证EditText。因此,我希望允许用户输入由单个空格字符分隔的价格。我只是禁用保存按钮,除非用户的输入与正则表达式匹配。我已经把你的正则表达式转换成我需要的了。我刚刚换了一个字:)谢谢你,非常感谢你的回答。实际上,我想验证EditText。因此,我希望允许用户输入由单个空格字符分隔的价格。我只是禁用保存按钮,除非用户的输入与正则表达式匹配。我已经把你的正则表达式转换成我需要的了。我刚刚换了一个字:)非常感谢