假设有一个包含以下内容的表:
<td>Dog,Cat,Mouse</td>
<td>Snake,Dragon,Dinosaur,Lizard</td>
<td>Owl,Falcon,Phoenix</td>
我希望在python上做到这一点:
>>>pets
[['Dog'],['Cat'],['Mouse'],['Snake'],['Dragon'],['Dinosaur'],['Lizard'],['Owl'],['Falcon'],['Phoenix']]
这是我迄今为止所管理的内容。
animal = table.find_all('td')
pets = []
for i in animal:
a = re.findall('[A-Z][a-z]*',str(i))
pets.append(a)
然而,我无法找到一种方法转向
['Dog','Cat','Mouse']
到
['Dog'],['Cat'],['Mouse'],
等等。请帮忙。这是我编程的前几天,我已经陷入困境。 提前谢谢。
答案 0 :(得分:2)
import re
strs = """<td>Dog,Cat,Mouse</td>
<td>Snake,Dragon,Dinosaur,Lizard</td>
<td>Owl,Falcon,Phoenix</td>"""
r = re.compile(r'<td>(.*?)</td>')
print [[x] for m in r.finditer(strs) for x in m.group(1).split(',')]
打印:
[['Dog'], ['Cat'], ['Mouse'], ['Snake'], ['Dragon'], ['Dinosaur'], ['Lizard'], ['Owl'], ['Falcon'], ['Phoenix']]
并在同一行支持多个<td>..</td>
。
答案 1 :(得分:2)
首先,您应该知道regex
(正则表达式)并不总是解析某些数据的最佳解决方案。例如,您的所有元素都以,
分隔,因此split
方法可行。
至于将元素作为具有单个元素的数组,列表理解是最简单的方法。 再次:确保真的想要/需要这样做。拥有一组包含单个元素的列表没有多大意义。
以下是建议的实施方案:
elements = table.find_all('td')
pets = []
for e in elements:
# The following line is only needed if 'find_all' keeps the <td> and </td>
e_tagless = e[5:len(e)-5]
animals = e_tagless.split(',')
pets += [ [animal] for animal in animals ]
答案 2 :(得分:0)
试试这个:
>>> my_list = ['Dog','Cat','Mouse']
>>> map(lambda x: [x], my_list)
[['Dog'], ['Cat'], ['Mouse']]
答案 3 :(得分:0)
改变这个:
animal = table.find_all('td')
pets = []
for i in animal:
a = re.findall('[A-Z][a-z]*',str(i))
pets.append(a)
对此:
animal = table.find_all('td')
pets = []
for i in animal:
a = re.findall('[A-Z][a-z]*',str(i))
pets.append([a])
当你在循环迭代期间将每个项目标记到它自己的列表中时,你只是错过了两个字符[]
。