Python 如何用空格求数的值

Python 如何用空格求数的值,python,regex,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 数字与右侧的

我以前有这样的字符串:

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 

我的代码目前只给我这个
2300
430
(即右边没有零)。

您只需要
rsplit
str。替换
空格:

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
或者使用translate可能会稍微快一点:

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," ")

您可以使用下面的正则表达式

>>> 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
功能删除数字中的空格

您可以使用多个删除字符而不使用替换字符:

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
如果您知道每行只对一组数字感兴趣,那么您也可以只输出非数字字符:

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

所以你需要
2300 000
作为
2300 000 USD
的输出,而不是
2300
作为你的输出?@MarcoDinatsoli那么你想把我在你的问题中没有看到的字符串集中起来。我非常感谢你的努力,但正如你所看到的,我的函数返回值,但是在你的情况下,你做了一个循环,没有返回值你的实际输入是什么?你的代码返回的是
230000
而不是
230000
你可以编辑它吗?谢谢,你的意思是在re.findall(r'\d+(?:[\s,]\d+*',s)]中为i做这个“返回”[i.replace('',”)?