我如何在python中拆分它?

时间:2013-06-16 14:09:13

标签: python

假设有一个包含以下内容的表:

<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'], 

等等。请帮忙。这是我编程的前几天,我已经陷入困境。 提前谢谢。

4 个答案:

答案 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])

当你在循环迭代期间将每个项目标记到它自己的列表中时,你只是错过了两个字符[]