2013-12-09 47 views
2

正则表达式什么是C#中的最好的正则表达式验证以下条件?的页面范围

1,2-10,5-10,6,9-100 - 这有点像指定范围或以逗号分隔的个别页码。

+0

这是一个'string'?如果是的话,你可以使用String.Split(',')'.. –

+0

这个需求看起来不太清楚。你是否允许个别页面混合使用以逗号分隔的范围? –

+0

忽略了它是JavaScript和问题是有关转义反斜杠,这是在谷歌出现了对我来说: http://stackoverflow.com/questions/4468336/javascript-regular-expression-page-range-validation – moritzpflaum

回答

5

试试下面的表达式:

\d+(?:-\d+)?(?:,\d+(?:-\d+)?)* 

注意模式是相当脆弱的,因为它不允许任何空白原样。


的想法是围绕主子模式\d+(?:-\d+)?建:

  1. \d+ - 匹配一个或多个连续的数字(无论是单机还是作为左范围边界)
  2. -\d+ - 匹配减号后跟一个或多个数字(右侧范围边界)

拖尾问号使得减号d正确的范围边界可选(它也需要匹配单个页码); (?:)表示non-capturing group

+0

这是完美的。谢谢! – user2325247

+0

@ user2325247很高兴能帮到你。请考虑接受这个答案,如果它解决了你的问题! –

0

此正则表达式将单独匹配每一个页面范围:

\d+-\d+|\d+

我交替使用来实现这一目标。在\d+-\d+(页号范围)不匹配的情况下,它将简单地匹配一个单一的,无限数量\d+

如果你遇到的页面范围之间的任何字符,除了-,你将需要改变正则表达式。

+0

这个正则表达式不允许根据请求在数字之间使用逗号。 – DavidRR

+0

他说“用逗号隔开”。如果我匹配逗号,则页面范围不会分开。如果他需要每个页面范围后缀逗号,他可以使用正则表达式:'\ d + - \ d +,| \ d +,' –

+0

这将匹配'1'或'12'或'12,'或'12 -345,'单独。我对这个问题的解释是OP要匹配**逗号分隔的单个数字或范围(例如,“1,3-5,6,7-12”)的**序列**并确定**整个序列** 已验证。 – DavidRR

0

当我剪切和粘贴您的样本串,我注意到一个空格后面的1,在开始的时候:

1, 2-10,5-10,6,9-100 
^

我不知道这是否是故意的,但我认为这是合理的允许一个或多个空格字符围绕逗号。

这就是说,这里是一个正则表达式将满足您的要求:

^[0-9]+(?:(?:\s*,\s*|-)[0-9]+)*$ 
^^^^^^  ^^^^^^^^^^^^^^^
    A   B1 B2 C D 
      ^^^^^^^^^ 
       B 

A - One or more digits 
B1 - A comma with optional space characters on either side, *OR* 
B2 - A dash (without whitespace on either side) 
C - One or more digits 
D - Optionally repeat B and C 

注:\d[0-9]同等学历;前者匹配all Unicode digits。我推测只有数字09是你感兴趣的。