我得到了以下正则表达式几乎完成了工作,但不排除零......怎么做?
^(\d|\d{1,9}|1\d{1,9}|20\d{8}|213\d{7}|2146\d{6}|21473\d{5}|214747\d{4}|2147482\d{3}|21474835\d{2}|214748364[0-7])$
还有人可以解释一下这是如何工作的吗?
答案 0 :(得分:10)
正则表达式不是此作业的正确工具。更好的解决方案是从字符串中提取整数(您可以使用正则表达式,只需\d+
),然后将其转换为整数,然后根据所需范围检查整数。
一个重要的推论是永远不要盲目地使用你自己不了解的正则表达式(或任何代码)。如果您使用上面的正则表达式,那么您会做什么,然后需要修改可接受的范围?
答案 1 :(得分:4)
正如格雷格所说,正则表达不适合这里的工作。但是,如果你坚持要知道你粘贴的正则表达式如何工作:
最重要的是要记住2**31 - 1 = 2147483647
(10位数字)。本质上,正则表达式说:
它将数字限制在低于2147483647的范围内。
P.S。给定这样一个数字作为字符串s
,在Python中,你可以设置这个条件:
1 <= int(s) <= 2**31 - 1
答案 2 :(得分:0)
除了其他答案之外,你的正则表达式不会工作(除了允许0):它错误地排除了2100000000,2147483639之类的数字,以及这两者之间的大部分数字。解决方案是用nnnn
替换大多数nnn[0-n]
前缀(以及其他修复),但真正的解决方案是不使用正则表达式。