假设我有大量HTML没有换行符。我想将每个元素放入列表中。
input = "<head><title>Example Title</title></head>"
a_list = ["<head>", "<title>Example Title</title>", "</head>"]
像这样的东西。在每个><
之间拆分。
但在Python中,我不知道如何做到这一点。我只能将分割为该字符串,将其从输出中删除。我想保留它,并在两个相等运算符之间分配。
如何做到这一点?
编辑最好不要将字符添加回每个列表项的末尾。
答案 0 :(得分:3)
你可以试试这个:
import re
a = "<head><title>Example Title</title></head>"
data = re.split("><", a)
new_data = [data[0]+">"]+["<" + i+">" for i in data[1:-1]] + ["<"+data[-1]]
输出:
['<head>', '<title>Example Title</title>', '</head>']
答案 1 :(得分:3)
# initial input
a = "<head><title>Example Title</title></head>"
# split list
b = a.split('><')
# remove extra character from first and last elements
# because the split only removes >< pairs.
b[0] = b[0][1:]
b[-1] = b[-1][:-1]
# initialize new list
a_list = []
# fill new list with formatted elements
for i in range(len(b)):
a_list.append('<{}>'.format(b[i]))
这将在python 2.7.2中输出给定的列表,但它也应该在python 3中工作。
答案 2 :(得分:2)
在扩展示例上使用re.findall()
函数的最短方法:
# extended html string
s = "<head><title>Example Title</title></head><body>hello, <b>Python</b></body>"
result = re.findall(r'(<[^>]+>[^<>]+</[^>]+>|<[^>]+>)', s)
print(result)
输出:
['<head>', '<title>Example Title</title>', '</head>', '<body>', '<b>Python</b>', '</body>']
答案 3 :(得分:1)
根据其他人的回答,我做了这个。
它并不像我想要的那样干净,但它似乎有效。我本来想在拆分后不再重新添加字符。
在这里,我通过将两个字符组合成一个字符串来消除一个额外的参数。无论如何,
def split_between(string, chars):
if len(chars) is not 2: raise IndexError("Argument chars must contain two characters.")
result_list = [chars[1] + line + chars[0] for line in string.split(chars)]
result_list[0] = result_list[0][1:]
result_list[-1] = result_list[-1][:-1]
return result_list
积分转到@cforeman
和@Ajax1234
。
答案 4 :(得分:0)
甚至更简单,这个:
input = "<head><title>Example Title</title></head>"
print(['<'+elem if elem[0]!='<' else elem for elem in [elem+'>' if elem[-1]!='>' else elem for elem in input.split('><') ]])