正则表达式:非零数字后跟一个或多个空格,后跟非零数字

时间:2018-02-18 19:15:48

标签: c# regex

尝试以[1-9]格式匹配用户输入,空格,[1-9]
所以
1 1应该通过
1 0应该失败

new Regex(@"^[1-9]+\s+\d+").IsMatch(input) //works but allows 0 for the 2nd number
new Regex(@"^[1-9]+\s+\[1-9]+").IsMatch(input) //does not work for some reason

我觉得我错过了一些超级基本的东西,但我无法找到答案。

1 个答案:

答案 0 :(得分:0)

您的正则表达式都无法正常工作。 ^[1-9]+\s+\d+模式匹配从19的1+位数,然后是1 +个空格,然后是任意数字,可以跟随任何数字,任意数量的任何字符。 ^[1-9]+\s+\[1-9]+模式包含转发的[,而不是匹配19的任何1位数,而[1-9]\[1-9]+匹配[ {1}},然后是1-9子字符串,然后是1 + ]个字符。

如果您计划匹配由1 +个空格分隔的单个非零数字组成的字符串,请使用@"^[1-9]\s+[1-9]$"。请参阅this regex demo

如果您计划匹配一个字符串,该字符串由两个数字块组成,而不是以0开头并用1个或多个空格字符分隔,请使用

@"^[1-9][0-9]*\s+[1-9][0-9]*$"

请参阅regex demo。请注意$是字符串锚点的结尾,它几乎不允许任何字符(它在字符串的末尾允许\n,因此,您可能想要使用\z而不是$)。

模式详情

  • ^ - 字符串开头
  • [1-9] - 12 ... 9
  • [0-9]* - 零或更多digtis
  • \s+ - 1+空白字符
  • [1-9][0-9]* - 见上文
  • $ / \z - 字符串结尾/字符串锚点的结尾。