以下行:
rank = re.search('(\d)+', line)
應改爲:
rank = re.search(r'\d+', line).group() # (..) is not needed
得到一個字符串。
如果你想int
對象,使用int
:
rank = int(re.search(r'\d+', line).group())
BTW,使用re.findall
,你的程序可以簡化。
import re
def extract_rankname(line):
groups = re.findall('<td>(.*?)</td>', line)
try:
rank = groups[0] # int(groups[0])
return {rank: groups[1:]}
except ValueError:
return {} # return None
extract_rankname('<tr align="right"><td>1</td><td>Michael</td><td>Jessica</td>')
# => {'1': ['Michael', 'Jessica']}
或者,而不是使用正則表達式解析HTML時,最好使用庫像BeatufiulSoup,LXML。
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<tr align="right"><td>1</td><td>Michael</td><td>Jessica</td>', 'lxml')
>>> [td.text for td in soup.find_all('td')]
[u'1', u'Michael', u'Jessica']
>>> tds = [td.text for td in soup.find_all('td')]
>>> tds[0], tds[1:]
(u'1', [u'Michael', u'Jessica'])
>>> print(tds[0]) # rank
1
>>> tds[1:] # names
[u'Michael', u'Jessica']
'.group()'應該返回一個字符串。你能展示你使用的模式嗎? – falsetru
這是我爲提取創建的函數: 'def extract_rankname(line): name = [] rank = re.search('(\ d)+',line) male_name = re.search('( \ d)+([\ W] +)」,線) female_name = re.search( '(\ d)+([\ W] +)([\ W] +)', line) name.append(male_name.group(2)) name.append(female_name.group(3)) rankname = {rank:name} 'return(rankname)' –
謝謝..解決了這個問題。 –