Python:从字符串中提取数字

3
我刚接触Python,尝试将“价格标签字符串”转换为浮点数,以便可以轻松地与其他价格进行比较。 我寻找了两个小时的答案来解决这个“简单问题”,但没有一个符合我的需求。
基本上,我有一个像这样的价格:
1.222.333,44 EUR

(逗号和句号互换,因为我住在德国,这也非常烦人)

我想要得到这个以便进行简单比较:

1222333.44

主要想法是比较价格,这是我的学校项目。
我曾经使用php做过所有事情,它可以运行,但速度太慢了。
如果您有更优雅或简单的方法,请告诉我。

2
比什么更优雅?你没有发布解决方案。 - wwii
可能是转换小数点的重复问题。 - wwii
3个回答

8
这适用于您提供的特定情况:
float(s.replace('.', '').replace(',', '.').split(' ')[0])

需要注意的是:
  1. 价格中使用句点作为分隔符;
  2. 价格中只能有一个逗号,且仅用作小数点;
  3. 价格在字符串中排在最前面,且与其他字符串之间用空格分割。
顺便提一下,如果需要更加通用的解决方案,可以参考hiro protagonist的回答,使用locale模块会更加方便切换数字系统和维护代码。

8

您可以使用您的(或任何)区域设置将字符串转换为浮点数:locale.atof

import locale
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
print(locale.atof('1.222.333,44'))  # -> 1222333.44

根据您的默认语言环境,您可能甚至不需要指定语言环境。

在您的情况下,您可能需要将货币(EUR)部分分离出来:

price = '1.222.333,44 EUR'
price_float = locale.atof(price.split()[0])
print(price_float) # -> 1222333.44

注意:可能不需要设置LC_ALL,只需将LC_NUMERIC设置为所需的内容即可。

0

如果你的字符串是"1.222.333,44欧元"

prince = "1.222.333,44 EUR"
price = price[:-4]
price = price.replace(".","").replace(",",".")
floatprice = float(price)

如果是像这样的 "1.222.333,44"
floatprice = float("1.222.333,44".replace(".","").replace(",","."))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接