python - 验证字符串是否仅包含一系列数字 Python 2.7

标签 python regex python-2.7 range

我需要验证一个字符串是否是 Python2.7 中格式正确的数字范围,我指的是我们在选择某些特定页面进行打印时使用的范围,如下所示:

1,3,5-7, 10, 15 - 20

我希望它接受破折号和逗号周围的空格,因为人们通常倾向于在这样的范围内使用空格:

我尝试了正则表达式,但运气不佳。 Python 3 中有 re.fullmatch 显然只有在整个字符串匹配模式时才匹配,它在 Python 2.7 中不存在,但是我试过 this way在 Python 2 中执行此操作显然可以正常工作,但我的正则表达式似乎是错误的。我尝试了许多不同的正则表达式,但它们都以一种或另一种方式失败了,最后一个允许在行的开头使用错误的字符(这仅适用于逗号,还没有破折号):

^\d+$|(\d+)(\s?)(,{1})(\s?)(\d+)

我不一定要为此使用正则表达式,但是如果知道如何使用正则表达式解决这个问题会很高兴。

最佳答案

如果您要使用正则表达式,也许这会符合您的要求:

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

解释

  • ^ 断言行的开始
  • \d+匹配一个或多个数字
  • (?: 非捕获组
    • *- *\d+ 匹配零个或多个空格后跟一个连字符、一个或多个空格和一个或多个数字
  • )? 关闭非捕获组并使其可选
  • (?: 非捕获组
    • , *\d+ 匹配逗号、零个或多个空格和一个或多个数字
    • (?: 非捕获组
      • *- *\d+ 匹配零个或多个空格后跟连字符、零个或多个空格字符和一个或多个数字
    • )? 关闭非捕获组并使其可选
  • )* 关闭非捕获组并重复它零次或多次
  • $ 断言行尾

Demo

关于python - 验证字符串是否仅包含一系列数字 Python 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51064563/

相关文章:

java - 优化Java代码中的几个RegEx

Ubuntu 15.04上的Python环境

python - 使用请求上传文件并发送额外数据

python - 子类化 django 文件字段表单小部件?

python - 具有基于类的 View 的装饰器

python - 使用python查找图像中黑色/灰色像素的所有坐标

Python 正则表达式 交替运算符后没有组

python - Pandas:一列具有重复组到多列

java - 正则表达式 - 指定字符串中重复字符值的数量

database - 与谷歌应用程序引擎兼容的简单网络应用程序