首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >页面范围的正则表达式

页面范围的正则表达式
EN

Stack Overflow用户
提问于 2013-12-09 20:32:28
回答 3查看 3.5K关注 0票数 2

在c#中,验证以下条件的最佳正则表达式是什么?

1,2-10,5-10,6,9-100 -它类似于指定为范围的页码或用逗号分隔的单个页码。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-09 20:40:20

尝试以下表达式:

代码语言:javascript
运行
复制
\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*

请注意,该模式非常脆弱,因为它不允许任何空白。

这个想法是围绕着主要的子模式\d+(?:-\d+)?构建的。

  1. \d+ -匹配一个或多个连续数字(要么是独立的,要么是左范围边界)
  2. -\d+ -匹配一个减号,后面跟着一个或多个数字(右范围边界)

尾随问号使减号和右范围边界可选(这也是匹配单个页码所必需的);(?:)表示一个非捕获群

票数 6
EN

Stack Overflow用户

发布于 2013-12-09 20:58:21

当我剪切并粘贴您的示例字符串时,我注意到在开始时1,后面有一个空格:

代码语言:javascript
运行
复制
1, 2-10,5-10,6,9-100
  ^

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

尽管如此,这里有一个regex,可以满足您的需求:

代码语言:javascript
运行
复制
^[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]不是等价的;前者与所有Unicode数字匹配。我已经假定只有通过0通过9的数字是您感兴趣的。

票数 2
EN

Stack Overflow用户

发布于 2013-12-09 20:52:30

此正则表达式将分别匹配每个页面范围:

\d+-\d+|\d+

我用交替来完成这件事。如果\d+-\d+ (一个页码范围)不匹配,它将简单地匹配一个单数无限数\d+

如果在除-之外的页面范围内遇到任何字符,则需要更改regex。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20480155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档