具有前导空格的确切字符数

时间:2017-01-24 18:51:10

标签: c# regex

我正在试图弄清楚如何匹配以下规则......

  • 正好4个字符(字母数字)或零个字符
  • 如果仅用于左侧填充
  • ,则字符可以为空格
  • 不能只包含4个空格

可接受的匹配示例:

""
"  43"
" D42"

不可接受的匹配示例:

"1 A3"
"1   "
"    "
"A 1 "

我尝试使用以下正则表达式,但它没有给出预期的结果。

(([\s]*[0-9A-Z]*){4}|)

2 个答案:

答案 0 :(得分:4)

正则表达式对计数不是很好,但是当数量很少时,例如4,你可以构建一个简单的重复正则表达式来完成这项工作:

^(|[0-9A-Z]{4}| {1}[0-9A-Z]{3}| {2}[0-9A-Z]{2}| {3}[0-9A-Z]{1})$

此正则表达式列出了一个空字符串,以及四个可接受的空格用法:

  • 没有空格,四个字符
  • 一个空格,三个字符
  • 两个空格,两个字符
  • 三个空格,一个字符

Demo.

答案 1 :(得分:1)

根据OP的问题,要求匹配字母数字字符,除非他们指定RegexOptions.IgnoreCase,否则接受的答案将与小写a-z不匹配。

所以正确的解决方案应该是通过该选项,选择

^(|[\w]{4}| {1}[\w]{3}| {2}[\w]{2}| {3}[\w]{1})$

或者选择

^(|[0-9A-Za-z]{4}| {1}[0-9A-Za-z]{3}| {2}[0-9A-Za-z]{2}| {3}[0-9A-Za-z]{1})$