2013-04-14 9 views
-1

我需要從wikipedia.org獲取一些數據。 我有字符串a ='4 200 000+文章',並且我需要得到int b = 4200000. 我已經得到了BS4的這個字符串,並且我試圖通過int(a)簡單解析,但它是 顯然這不起作用。 你能幫我嗎?高級從字符串解析爲int Python

回答

1

你需要一個正則表達式來獲取數出這樣的文字:

import re 

int_numbers = re.compile('\d[\d ]*') 

def extract_integer(text): 
    value_match = int_numbers.search(text) 
    if value_match: 
     try: 
      return int(value_match.group().replace(' ', '')) 
     except ValueError: 
      # failed to create an int, ignore 
      pass 

模式數字,後面接着0或更多更多的數字或空格匹配。

演示:

>>> a = '4 200 000+ articles' 
>>> extract_integer(a) 
4200000 

如果您在輸入文字需要所有這樣的數字,使用.finditer()和發電機:

def extract_integers(text): 
    for value_match in int_numbers.finditer(text): 
     try: 
      yield int(value_match.group().replace(' ', '')) 
     except ValueError: 
      # failed to create an int, ignore 
      pass 

演示:

>>> for i in extract_integers('4 300 123 times 42'): 
...  print i 
... 
430
42 
>>> list(extract_integers('4 300 123 times 42')) 
[4300123, 42] 
0

如果所有你想要做的是刪除除了數字以外的所有東西,你可以使用一些東西如:

>>> x = "500000+" 
>>> import string 
>>> all=string.maketrans('','') 
>>> nodigs=all.translate(all, string.digits) 
>>> x.translate(all, nodigs) 

這將刪除字符串中除數字0-9之外的所有字符。

0
>>> import re 
>>> a = re.findall(r'[\d ]+', '4 200 000+ articles') 
>>> print a 
['4 200 000', ' '] 
>>> [x.replace(' ','') for x in a if x.strip()] 
['4200000']