2017-12-27 200 views
-3

我是新来的正则表达式获取货币数字,我试图用re.findall提取货币般的数字(整数或1漂浮或2DP)从形式的字符串:Python的正则表达式:从一个字符串

'1000 - 2000' , '1000 -', '1000.4' 

我一直在努力寻找一个正则表达式模式,让我从字符串的所有数字提取到一个单独的列表,并希望在这个问题上的任何帮助。

例如,

import re 

pattern = '^\d*[.,]?\d*$' 
temp = ['1000.5 - 2000.55'] 
strings = re.findall('^\d*[.,]?\d*$', temp[0]) 

输出我得到的是一个空列表,[]

我想获得

strings = ['1000.5','2000.55'] 

,然后想将它们转换为浮动与

nums = [float(i) for i in strings] 
+2

你能提供样品的输入和预期的输出?您的问题将被视为*太宽泛*否则。 – ctwheels

+0

你是否也想用1个小数点的浮点数? – Marathon55

+0

此外,当你说'与2dp'你的意思是,如果你有一些像'1.123'你想获得'1.12'或要忽略它完全这样你没有它的输出显示?此外,如果有'1.126',假设你要切断这样,你得到'1.12'最后一个数字:你想'1.12'或'1.13'的舍入值? – ctwheels

回答

0
import re 

temp = ['1000.5 - 2000.55'] 
strings = re.findall('\d+(?:[.,]\d*)?', temp[0]) 
nums = [float(i) for i in strings] 
print(nums) # [1000.5, 2000.55] 

demo

0

你可以用[0-9.]+

import re 
pattern=r'[0-9.]+' 
temp = ['1000.5 - 2000.55'] 
for i in temp: 
    print(list(map(lambda x:float(x),re.findall(pattern,i)))) 

输出:

[1000.5, 2000.55] 

你也可以做一个行:

print([list(map(lambda x:float(x),re.findall(pattern,i))) for i in temp][0]) 

输出:

[1000.5, 2000.55] 
0

你可以试试这个:

import re 
temp = ['1000.5 - 2000.55'] 
final_data = map(float, re.findall('\d+\.\d+|\d+', temp[0])) 

输出:

[1000.5, 2000.55]