正则表达式,用于验证具有一个空格和一个可选特殊字符的数字

时间:2012-12-05 07:05:39

标签: c# .net regex

有人可以告诉我如何用一个空格验证数字序列,最后会有一个可选的特殊字符说'#',然后再跟着5个数字。

示例:

  

12345 6587#2584

我试过

(0(?:\d{0,11}|(?=\d* \d*$)[\d ]{0,12}))

但我不知道如何添加可选的'#',最后是数字。

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题

/^\d+\s\d+(?:#\d+)?$/

rubular

上查看
^      beginning of string
\d+    one or more numbers
\s     any whitespace character
\d+    one or more numbers
(?:    begin non-capturing group
  #    literal '#' character
  \d+  one or more numbers
)      end non-capturing group
$      end of string

修改

/^0[\d\s]{,11}(?:#\d{,5}?$/

匹配以0开头的字符串,后跟最多11个数字或空格。接下来是一个可选的#,后面最多包含5个数字。

答案 1 :(得分:0)

这个问题不是很清楚,但macek的建议确实回答了你关于如何添加'#'的可选标签后跟一些数字的问题,所以你应该尝试一下。 (具体来说,(?:#\d+)?$是正则表达式的相关部分; (?:#\d{0,5})?$将确保存在0到5位数。)

但是,您的正则表达式确保在可选的“#”之前只有1个空格且最多12个数字是不正确的。如上所述,前瞻是没有意义的,因为\d{0,11}将匹配任何字符串开头的0宽度字符串(因为这相当于0位)。你需要的是/^(?:[\d\s]{1,13}$)\d*\s\d*$/之类的东西。这将检查以确保存在正确数量的字符并且它们都是数字或空格,然后它将检查字符串中是否只有一个空格。这里有一些冗余,但这应该不是问题。此外,请注意我使用\s而不是空格字符,但请注意,这将匹配制表符和其他空格,这可能不是您想要的。 {1,13}的数字计数假定字符串由一个没有数字的单个空格组成是合法的,但空字符串是非法的;如果这不是正确的假设,请调整括号中的值。

最后,要结合上述正则表达式以确保使用可选标记的正则表达式进行正确的空格和位数计数,您需要更改前瞻,以便它可以匹配#以及{ {1}}:它应该是$

(请注意,我实际上没有测试过上面的正则表达式,所以我不是100%确定中间的/^(?:[\d\s]{1,13}(#|$))\d*\s\d*(#\d{0,5})?$/将适用于所有实现。如果没有,它可以是替换为冗余(#|$)。)