正则表达式 - 允许空格和任意数量的数字

时间:2014-06-27 11:48:30

标签: java regex

我的有效字符串应为"1234" or " 1234"

在开头允许one or zero space

然后是任意数量的digits

那么这个正则表达式应该是什么?

4 个答案:

答案 0 :(得分:4)

您可以使用:

^ ?\d+$

这样更容易阅读:

^[ ]?\d+$

请参阅demo

要测试您是否匹配,您可以(例如):

if (subjectString.matches("[ ]?\\d+")) {
    // It matched!
    } 
else {  // nah, it didn't match...  } 

此处您不需要^$锚点,因为matches方法会查找完全匹配。

<强>解释

  • ^锚点断言我们位于字符串的开头。根据使用的方法,可能不需要这些锚。
  • [ ]?匹配零个或一个空格。不需要括号,但它们更容易阅读。你可以删除它们。 不要使用\s ,因为它也会匹配换行符和标签。
  • \d+匹配一个或多个数字
  • $锚点断言我们位于字符串的末尾

答案 1 :(得分:3)

应为\\s?\\d+

System.out.println(Pattern.matches("\\s?\\d+", "1234"));  // true
System.out.println(Pattern.matches("\\s?\\d+", " 1234"));  // true
System.out.println(Pattern.matches("\\s?\\d+", "  1234"));  // false

\s表示空格,?表示零或一次出现。 \d对应于+的数字,表示至少有一次出现。

如果只允许空格字符(例如没有标签),请使用( )?\\d+

答案 2 :(得分:2)

你的正则表达式是,

^\s?[0-9]+$

Demo

<强>解释

  • ^断言我们正处于起步线。
  • \s?允许零个或一个空格。
  • [0-9]+一个或多个号码。
  • $断言我们在行尾。

答案 3 :(得分:2)

如果您的输入数据必须只有一个空格(不是空格),那么您需要的正则表达式为?\d+(注意“?”之前的空格)。

另一方面,如果您的输入数据必须包含空格,那么您需要将正则表达式调整为:

\s?\d+

空格字符可以是:

A space character
A tab character
A carriage return character
A new line character
A vertical tab character
A form feed character

请注意,如果您需要丢弃数字后面的所有字符,则不必匹配instace 1234fff,那么您可以将正则表达式修复为:\s?\d+\b(这将让你的正则表达式有一个边界。)

请记住在java代码中转义反斜杠,因此\s?\d+将为\\s?\\d+

下面你可以找到一个空格的正则表达式,后跟只有数字。

enter image description here