2015-04-21 25 views
-3

我曾經有過這樣的字符串:如何獲得數的平均值與空間

233.43 USD 
634,233 EURO 

和我以前用這個來提取這些字符串的數字:

def extractNumbersFromString(value): #This function is to get the numbers froma string 
     return re.search('(\d+(?:[.,]\d*)*)', value).group(1) 

現在,我得到的字符串像這些還有:

2300 000 USD 
430 000 EU 

哪裏有數字和在該零之間的空間右邊

如何調整我的代碼以從這些字符串中提取數字?

需要的輸出:

2300000 
430000 

我的代碼目前給我的只是這2300430(即沒有右邊零點)。

+1

因此,您需要'2300 000'作爲'2300 000美元'輸出而不是'2300'? –

+0

@BhargavRao確切 –

回答

0

你可以使用下面的正則表達式。

>>> s = '''2300 000 USD 
430 000 EU''' 
>>> re.findall(r'\d+(?:[ ,.]\d+)*', s) 
['2300 000', '430 000'] 
>>> [i.replace(' ','') for i in re.findall(r'\d+(?:[\s,.]\d+)*', s)] 
['2300000', '430000'] 

使用replace函數在最後刪除數字中的空格。

DEMO

+0

你的代碼會返回'230 000'而不是'230000'嗎?你可以編輯它嗎? –

+0

完成,檢查我的更新.. –

+0

謝謝,你的意思是讓這個'** return ** [i.replace('','')for我在re.findall(r'\ d +(?:[\ s,。] \ d +)*',s)]'? –

1

你只需要rsplitstr.replace空間:

s="""233.43 USD 
634,233 EURO 
2300 000 USD 
430 000 EU 
""" 


for line in s.splitlines(): 
    a,_= line.rsplit(None, 1) 
    print(a.replace(" ","")) 


233.43 
634,233 
2300000 
430000 

或者使用翻譯可能會稍微快:

for line in s.splitlines(): 
    a,_= line.rsplit(None, 1) 
    print(a.translate(None," ")) 

如果值總是從你輸入例如行:

def extractNumbersFromString(value): 
    a, _= value.rsplit(None, 1) 
    return a.translate(None," ") 

或者與re一起使用它:

def extractNumbersFromString(value): #This function is to get the numbers froma string 
    return [a.translate(None," ") for a in re.findall('(\d+(?:[ .,]\d*)*)', value)] 

您也可以rstrip字母:

from string import ascii_letters 
for line in s.splitlines(): 
    print line.rstrip(ascii_letters).translate(None," ") 
+0

你的代碼的結果是'230'而不是'230000' –

+0

@MarcoDinatsoli然後你想連接我沒有看到你的問題的字符串。 –

+0

我真的很感謝你的努力,但正如你所看到的,我的函數返回值,但在你的情況下,你做了一個循環,沒有返回值 –

0

您可以使用str.translate多個缺失和不替換字符:

txt='''\ 
233.43 USD 
634,233 EURO 
2300 000 USD 
430 000 EU''' 

import re 

def extractNumbersFromString(value):  
    return re.search(r'^(\d+)', value.translate(None, " ,.")).group(1)  

for line in txt.splitlines(): 
    print "{:>20} =>{:>10}".format(line, extractNumbersFromString(line)) 

打印:

 233.43 USD =>  23343 
    634,233 EURO => 634233 
    2300 000 USD => 2300000 
     430 000 EU => 430000 

如果你知道你是隻在每個數字的一​​個分組感興趣行,你可以只用filter輸出非數字字符:

def extractNumbersFromString(value):  
    return filter(str.isdigit, value)