【发布时间】:2010-11-03 01:12:21
【问题描述】:
目标:给定一个数字(它可能很长并且大于 0),我想得到五个最不重要的数字,在该数字的末尾去掉任何 0。
我试图用正则表达式解决这个问题,在 RegexBuddy 的帮助下,我来到了这个:
[\d]+([\d]{0,4}+[1-9])0*
但是python不能编译那个。
>>> import re
>>> re.compile(r"[\d]+([\d]{0,4}+[1-9])0*")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/re.py", line 188, in compile
return _compile(pattern, flags)
File "/usr/lib/python2.5/re.py", line 241, in _compile
raise error, v # invalid expression
sre_constants.error: multiple repeat
问题是“{0,4}”后面的“+”,它似乎在python中不起作用(即使在2.6中)
如何编写一个有效的正则表达式?
PS:
我知道你可以开始除以 10,然后使用余数 n%100000...但这是关于正则表达式的问题。
【问题讨论】:
-
实际上,我认为 + 根本不应该在那里。
-
尝试用 \1 替换。用足够长的数字在 RegexBuddy 上测试一下,你会发现区别
-
啊,Blixt 的回答提到 + 应该是强制 {0,4} 贪婪的修饰符。我不记得以前见过那种语法——显然 Python 也没有。 (在 Java 中,它显然使 {0,4} “占有”而不是贪婪。)
-
啊,确实如此,它迫使它变得比贪婪还多。 + 告诉引擎永远不要回溯,就像默认情况下那样。所以这并不是真正的贪婪。所有格是正确的定义 =)
标签: python regex regexbuddy