如何设置重复正则表达式?

时间:2013-08-22 10:22:41

标签: c# regex

我有正则表达式^\d{5}$|^\d{5}-\d{4}*$"它检查了US zip。 但我需要检查“zip, zip, zip”如何做到这一点?

我试过这个^(\d{5}$|^\d{5}-\d{4},)*$,但它不起作用

3 个答案:

答案 0 :(得分:4)

尝试

((^|, )(\d{5}|\d{5}-\d{4}))*$

测试员:http://regexr.com?36297

每个匹配必须以(^|, )开头,所以在字符串的开头或,(逗号空格)

请注意,您不应在.NET中使用\d,因为٠١٢٣٤\d! (在.NET \d中包含非ASCII Unicode数字)。 [0-9]通常更好。

答案 1 :(得分:0)

您似乎需要的表达式是:

    ^\d{5}(|-\d{4})(,\d{5}(|-\d{4}))*$

你试图写的是:

    ^(\d{5}|\d{5}-\d{4},)*$

但是这需要每个ZIP都有一个尾随的逗号,这是最后一个没有的。

打破给出的答案,

  • \d{5}(|-\d{4})是您原作的变体,但只需将-1234选为。
  • (,\d{5}(|-\d{4}))*是第一个以逗号开头的正则表达式,允许零次或多次。

答案 2 :(得分:0)

我会用它来加速:

 ^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)*$

扩展

 ^ 
 \d{5} 
 (?: - \d{4} )?
 (?:
      , \s* \d{5} 
      (?: - \d{4} )?
 )*
 $

这是为了提高速度/灵活性:

 ^\s*\d{5}(?:\s*-\s*\d{4})?(?:\s*,\s*\d{5}(?:\s*-\s*\d{4})?)*\s*$

扩展

 ^ 
 \s* 
 \d{5} 
 (?: \s* - \s* \d{4} )?
 (?:
      \s* , \s* \d{5} 
      (?: \s* - \s* \d{4} )?
 )*
 \s* 
 $