我正在尝试在 Python 中解析正则表达式,并将解析后的字符串的值分配给 2 个变量。
例如如果我有一个字符串
<tr align="right"><td>1</td><td>Michael</td><td>Jessica</td>
我想将值 1 分配给名为 rank 的整数变量,并将值 [Michael, Jessica] 分配给名为 name 的数组。
当我使用 re.search()
解析并使用 .group()
函数赋值时,分配的变量类型是 _sre.SRE_Match 。你能帮我把它分别转换成整数和字符串格式吗?
下面一行:
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())
顺便说一句,使用 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']
我是一名优秀的程序员,十分优秀!