这个问题已经有答案了:
Python - regex extract numbers from text that may contain thousands or millions separators and convert them to dot separated decimal floats(1个答案)
18天前关闭
我使用Python 3.8和正则表达式来过滤带有数值的字符串。如何使用 re.search 过滤字符串中的十进制值?我尝试了[\d.]模式,但这并不能帮助获取更大的数字。
s = 'e (s): 16,154.5 2,308,282.6'
s1 = re.search(r'e (s):(\s+)[\d.]+(\s+)[\d.]+',s)
print(s1.group())
输出
AttributeError: 'NoneType' object has no attribute 'group'
4条答案
按热度按时间zpqajqem1#
尝试以下模式,使用 *re.finditer**方法 *。
\d+
匹配数字 0 - 9,一个或多个(?:,\d+)*
匹配逗号后跟\d+
、零或任意\.\d+
匹配小数点后的\d+
这里有一个例子。
输出
2eafrhcq2#
我建议使用
re.findall
来扫描所有这些值。哦。我们知道这个模式将以一个数字开始。
或者我们可以简化一点,使
[\d,]
在初始数字之后成为一个出现零次或多次的模式,小数位和尾随数字是可选的:我们可以进一步完善这个。
在这里,数字是一个到三个数字,后面是一个逗号和三个以上的数字重复零次或更多次,然后可选地是一个小数点和至少一个数字。数字必须以字边界(
\b
)为界。在这一点上,获得所有这些作为浮点数是简单的。
当然,还有一件事我们知道,这个模式将从零以外的一个数字开始开始。这是一个很容易的修改。
euoag5mw3#
你可以匹配正则表达式:
如果存在匹配,则捕获组1和2将保存感兴趣的字符串。
Demo
如果使用Python的替代PyPI正则表达式引擎,正则表达式可以通过使用子表达式来简化:
这里
?1
匹配第一个捕获组中定义的表达式(即(\d{1,3}(?:,\d{3})*\.\d+)
)。Demo
44u64gxh4#
我的建议