regex python:从字符串python列表中提取浮点数(AUD 31.99)

zsohkypk  于 2022-12-14  发布在  Python
关注(0)|答案(5)|浏览(198)

python:从字符串的python列表中提取浮点数(AUD 31.99)。我使用openpyxl从Excel文件中读取金额列表。我将其保存在一个列表中,但该列表是字符串形式,如下所示:

['31.40 AUD', ' 32.99 AUD', '37.24 AUD']

我需要从字符串项列表中获取浮点数,这样我以后就可以将其保存在一个新列表中,以获取它们的总数。
所需输出:

[31.40, 32.99, 37.24]

我已经试过这些:

newList = re.findall("\d+\.\d+", tot[0])
print(newList)

输出量:

[31.40]

但是如何将它用于所有item元素?
我是新的python,这只是我做的一些工作,想看看总使用python而不是使用excel的查找和替换选项。谢谢

ccrfmcuu

ccrfmcuu1#

您可以使用map函数:

inList = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
output = list(map(lambda elem: float(elem.split()[0]), inList))
print(output)

输出量:

[31.4, 32.99, 37.24]
yeotifhr

yeotifhr2#

如果要使用regex获取值列表,请尝试

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
newList = [float(re.search('\d+\.\d+', fl).group(0)) for fl in tot]
print(newList)
# [31.40, 32.99, 37.24]

但是在这种情况下使用split似乎更容易解决

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
newList = [float(item.split()[0]) for item in tot] 
print(newList)
# [31.40, 32.99, 37.24]

如果第二个子字符串始终相同("AUD"),您也可以尝试

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']
newList = [float(item.rstrip(' AUD')) for item in tot] 
print(newList)
# [31.40, 32.99, 37.24]
smdnsysy

smdnsysy3#

有没有可能用字符串分割来代替呢?我想这样会简单得多

ls1 = ['32.46 AUD', '17.34 AUD']

myFloats = []
for aString in ls1:
    aFloat = float(aString.split()[0])
    myFloats.append(aFloat)
ecfsfe2w

ecfsfe2w4#

你应该考虑处理错误。下面是一个例子:

import re
import math

def float_from_string(str_):
    # Try to extract a floating number, if fail return nan
    r = re.search('\d+\.\d+', str_)
    return float(r.group()) if r else math.nan

tot = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD', ' nonumberhere AUD']
totfloat = [float_from_string(i) for i in tot]

print(totfloat)

退货:

[31.4, 32.99, 37.24, nan]
7xzttuei

7xzttuei5#

考虑到名单如下

l = ['31.40 AUD', ' 32.99 AUD', '37.24 AUD']

有多种方法来提取浮点数。下面将给出五种可能的选择。

选项1

将正则表达式与Python的re结合使用,并使用列表解析,如下所示

import re

regex = re.compile(r'(\d+\.\d+)')
l = [float(regex.search(x).group(1)) for x in l]

[Out]: 

[31.4, 32.99, 37.24]

备选案文2

使用str.stripstr.split,如下所示

l = [float(x.strip().split(' ')[0]) for x in l]

[Out]: 

[31.4, 32.99, 37.24]

方案3

使用str.split,如下所示

l = [float(x.split()[0]) for x in l]

[Out]: 

[31.4, 32.99, 37.24]

方案4

一种方法是使用str.strip删除空格和货币(AUD),如下所示

l = [float(x.strip(' AUD')) for x in l]

[Out]: 

[31.4, 32.99, 37.24]

假设有一个包含各种货币的列表(比如AUDUSDEUR),由于列表中只有AUD,因此可以如下使用str.strip

hl = [' AUD', ' USD', ' EUR']

l = [float(x.strip(hl[0])) for x in l]

[Out]: 

[31.4, 32.99, 37.24]

选项5

适用于此用例的另一种方法如下

l = [float(x[:6]) for x in l]

[Out]: 

[31.4, 32.99, 37.24]

然而,请注意,根据列表中字符串的浮点数,可能需要调整数字或采用不同的方法。

相关问题