正则表达式c#涉及数字和空格

时间:2012-01-13 22:02:41

标签: c# .net regex

以下正则表达式做了什么?

    \d{1,3}.?\d{0,3}\s[0-9a-zA-Z. -]{4,40} 

我理解d代表数字,但1,3代表什么。

如果有人可以进一步解释,那将是值得赞赏的

1 个答案:

答案 0 :(得分:2)

{n,m}是一个量词,意思是“至少n次,最多m次”。像所有量词一样,它默认是贪婪的,对于支持它们的正则表达式,它也有懒惰和占有的版本(分别为{n,m}?{n,m}+ - .NET支持前者但不支持后者,不幸的是)。

如果未指定n,则为0;如果未指定m,则为无穷大。

这意味着您可以使用此量词“重写”经典*+?

  • *{0,};
  • +{1,};
  • ?{0,1}

(注意:我认为.中的.?意味着是一个字面点,这意味着它应该被转义,即\.?;正则表达式中的点意味着“任何字符“,除了字符类。”

关于正则表达式本身:

\d{1,3}        # match a digit, one to three times, followed by
.?             # any character, 0 or one time (see my remark), followed by
\d{0,3}        # a digit, zero to three times, followed by
\s             # a space character, followed by
[0-9a-zA-Z. -] # a digit, or any letter, or a dot, or a space, or a hyphen,
{4,40}         # 4 to 40 times

最后,应该注意.NET语言中的\d不会将自身限制为0-9,它可以匹配其他Unicode数字。

编辑:正确的,正确的,考虑到@AlanMoore的评论,将是:

\d{1,3}(\.\d{1,3})?\s[0-9a-zA-Z. -]{4,40}

也许这个正则表达式也应该被锚定......但这只是猜测。