如何用空间获得数字的价值

时间:2015-04-21 10:00:39

标签: python regex

我曾经有这样的字符串:

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(即右侧没有零)。

3 个答案:

答案 0 :(得分: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)]

你也可以写字母:

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

答案 1 :(得分: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

答案 2 :(得分: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)