我需要验证一个字符串是否是 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+
匹配零个或多个空格后跟连字符、零个或多个空格字符和一个或多个数字
)?
关闭非捕获组并使其可选
)*
关闭非捕获组并重复它零次或多次$
断言行尾
关于python - 验证字符串是否仅包含一系列数字 Python 2.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51064563/