给定一个逗号分隔的数字 "123,456,789"
作为一个字符串,我试图构建一个正则表达式模式,该模式匹配(包括)最左边的逗号 ','
至最后一个整数(单位位值)位 '9'
. 对于上面字符串中的数字, ",456,789"
应该是匹配的。
我的代码如下:
import re
print(re.findall(r"(,\d{3})*", "123,456,789"))
# The above regular expression pattern is actually part of a much larger
# regular expression pattern to match a number that may or may not be
# comma delimited or be in scientific notation. The pattern is:
# r"([-+]?\d+){1}(,\d{3})*(\.\d+)?([Ee][+-]?([-+]?\d+){1}(,\d{3})*)?"
但是,上面的代码会产生一个逻辑错误,其中只返回最小(非贪婪)最右边的匹配。结果如下:
In [0]: print(re.findall(r"(,\d{3})*", "123,456")) # Expected output: ',456'
Out[0]: [',456', '']
In [1]: print(re.findall(r"(,\d{3})*", "123,456,789")) # Expected output: ',456,789'
Out[1]: [',789', '']
In [2]: print(re.findall(r"(,\d{3})*", "123,456,789,000")) # Expected output: ',456,789,000'
Out[2]: [',000', '']
请帮我找出我的错误。
2条答案
按热度按时间cx6n0qe31#
使用字符串\a的regex start仅查找第一个匹配项。
要得到'456789'
lf3rwulv2#
您只需添加一个
?:
到您的模式以抑制子组,使模式(?:,\d{3})*
:输出:
这个
filter
有一种方法可以过滤掉空字符串。