Skip to main content
 首页 » 编程设计

python之Python 中的正则表达式

2025年05月04日22davidwang456

目标:给定一个数字(它可能很长并且大于 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 中也是如此)

如何编写一个有效的正则表达式?

附言: 我知道您可以开始除以 10,然后使用余数 n%100000...但这是关于正则表达式的问题。

请您参考如下方法:

那个正则表达式非常多余。试试这个:

>>> import re 
>>> re.compile(r"(\d{0,4}[1-9])0*$") 

上面的正则表达式假设数字是有效的(例如,它也会匹配“abc0123450”)。如果你真的需要验证没有非数字字符,你可以使用这个:

>>> import re 
>>> re.compile(r"^\d*?(\d{0,4}[1-9])0*$") 

反正\d不需要在字符类中,量词{0,4}也不需要强制贪心(正如附加的 + 指定的那样,尽管显然 Python 不识别它。)

此外,在第二个正则表达式中,\d 是非贪婪的,因为我相信这会提高性能和准确性。我还把它设为“零或更多”,因为我认为这就是您想要的。

我还添加了 anchor ,因为这可以确保您的正则表达式不会匹配字符串中间的任何内容。如果这是您想要的(也许您正在扫描长文本?),请移除 anchor 。