Python 选择字符串中的最大货币值

Python 选择字符串中的最大货币值,python,python-3.x,string,Python,Python 3.x,String,我有这个字符串: 达利西塔ão:43470,00雷亚尔,雷亚尔的四分之一,或萨门托的三分之一,约合24123,88雷亚尔 请注意,我的字符串中可能有几个货币值。 我只想分开最大的,返回值应该是43.470,00或43470.00或43470 我怎么能这么做 # Create regular expression pattern for currencies currency_pattern = re.compile(r"r\$ ([1-9][0-9.]*(?:,[0-9][0-9.]*)?)")

我有这个字符串:

达利西塔ão:43470,00雷亚尔,雷亚尔的四分之一,或萨门托的三分之一,约合24123,88雷亚尔

请注意,我的字符串中可能有几个货币值。 我只想分开最大的,返回值应该是43.470,00或43470.00或43470

我怎么能这么做

# Create regular expression pattern for currencies
currency_pattern = re.compile(r"r\$ ([1-9][0-9.]*(?:,[0-9][0-9.]*)?)")

# Find the currencies in the string
currencies = currency_pattern.findall(" da licitação: r$ 43.470,00 (quarenta e três mil, quatrocentos e setenta reais)\n\n3 dos recursos orçamento são r$ 24.123,88")

# Reformat strings and cast to float
normalized_currencies = (float(currency.replace('.', '').replace(',', '.')) for currency in currencies)

# Now we can easily find the maximum value using the `max` function
max_currency = max(normalized_currencies)
print(max_currency)
43470.0

43470.0


您可以使用正则表达式执行此任务:

import re

s = ''' da licitação: r$ 43.470,00 (quarenta e três mil, quatrocentos e setenta reais)\n\n3 dos recursos orçamento são r$ 24.123,88'''
m = max(re.findall(r'\d+\.?\d*,?\d*', s), key=lambda v: float(v.replace('.', '').replace(',', '.')), default=None)
print(m)
印刷品:

43.470,00

您可以使用正则表达式执行此任务:

import re

s = ''' da licitação: r$ 43.470,00 (quarenta e três mil, quatrocentos e setenta reais)\n\n3 dos recursos orçamento são r$ 24.123,88'''
m = max(re.findall(r'\d+\.?\d*,?\d*', s), key=lambda v: float(v.replace('.', '').replace(',', '.')), default=None)
print(m)
印刷品:

43.470,00

如果返回一个整数,就应该这样做了!: 我从中提取了代码的重要部分


如果返回一个整数,就应该这样做了!: 我从中提取了代码的重要部分


它确实适用于给定的示例,但是,使用列表中非常相似的字符串将导致43.47。出于某种原因,它正在消除零。如果我打印这个字符串:da licitação:r$43470,00 quarenta e três mil,quatrocentos e setenta reais 3 dos recursos orça。知道吗?我已经更新了一点代码。你能再试一次吗如果它仍然不工作,你能给我有问题的字符串吗?现在工作了,tks!在某些情况下,货币字符串之间可能有额外的空格,甚至没有空格,例如:r$43.470,00,r$43.470,00,r$43.470,00,r$43.470,00,r$43。470,00. 你有什么建议可以用货币模式来处理吗?当然。尝试将模式更改为:r\$?[1-9][0-9.]*?:,[0-9][0-9.]*?,然后添加.replace“”,对于给定的示例它确实有效,但是,使用列表中非常类似的字符串会导致43.47。出于某种原因,它正在消除零。如果我打印这个字符串:da licitação:r$43470,00 quarenta e três mil,quatrocentos e setenta reais 3 dos recursos orça。知道吗?我已经更新了一点代码。你能再试一次吗如果它仍然不工作,你能给我有问题的字符串吗?现在工作了,tks!在某些情况下,货币字符串之间可能有额外的空格,甚至没有空格,例如:r$43.470,00,r$43.470,00,r$43.470,00,r$43.470,00,r$43。470,00. 你有什么建议可以用货币模式来处理吗?当然。尝试将模式更改为:r\$?[1-9][0-9.]*?:,[0-9][0-9.]*?,然后添加。替换“”,