c#中用于验证以下条件的最佳正则表达式是什么?
1,2-10,5-10,6,9-100 - 它类似于指定为范围的页码或用逗号分隔的个别页面。
答案 0 :(得分:5)
尝试以下表达式:
\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*
请注意,该模式非常脆弱,因为它不允许任何空格。
这个想法围绕主子模式\d+(?:-\d+)?
构建:
\d+
- 匹配一个或多个连续数字(独立或左边界)-\d+
- 匹配一个减号后跟一个或多个数字(右范围边界)尾随问号使得减号和右范围边界可选(这也需要匹配单页数); (?:)
表示non-capturing group。
答案 1 :(得分:1)
当我剪切并粘贴您的样本字符串时,我注意到一开始就跟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。我假设您只对数字0
到9
感兴趣。
答案 2 :(得分:0)
此正则表达式将单独匹配每个页面范围:
\d+-\d+|\d+
我用替换来完成这个。如果\d+-\d+
(页码范围)不匹配,则只会匹配单数,无限数\d+
。
如果在-
之外的页面范围之间遇到任何字符,则需要更改正则表达式。