我试图在Python中解析正则表达式,并将解析后的字符串的值分配给2个变量。
例如,如果我有一个字符串
$oldWord -replace '[\f]', '' #You can also use \r for carriage return, \n for new line, \t for tab, \s for ALL whitespace
我想将值1分配给名为rank和值[Michael,Jessica]的整数变量到名为name的数组。
当我使用<tr align="right"><td>1</td><td>Michael</td><td>Jessica</td>
解析并使用re.search()
函数赋值时,指定的变量类型为_sre.SRE_Match。你能帮我解决一下如何将它转换为整数和字符串格式。
答案 0 :(得分:3)
以下一行:
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']
答案 1 :(得分:1)
你可以试试这个:
<td>(\w+)<\/td>
然后遍历匹配并分配给数组或变量......
示例代码(Run it here):
import re
regex = r"<td>(\w+)<\/td>"
test_str = "<tr align=\"right\"><td>1</td><td>Michael</td><td>Jessica</td>"
values=[]
matches = re.finditer(regex, test_str)
for match in matches:
if match.group(1).isdigit():
rank = int(match.group(1))
else:
values.append(match.group(1))
print(rank)
print(values)