我曾经有这样的字符串:
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
(即右侧没有零)。
答案 0 :(得分:1)
您只需要rsplit
和str.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
功能删除数字中的空格。
答案 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)