2017-08-15 46 views
1

假设我有很多没有换行符的HTML。我想把每个元素都放到一个列表中。Python:两个字符之间的分割

input = "<head><title>Example Title</title></head>" 

a_list = ["<head>", "<title>Example Title</title>", "</head>"] 

就像这样。分裂在每个><之间。

但在Python中,我不知道一种方法来做到这一点。我只能将分割为这个字符串,它将它从输出中移除。我想保留它,并在两个平等运算符之间进行分割。

这怎么办?

编辑:优选地,这将在没有将字符添加回每个列表项目的末尾的情况下完成。

+0

请从'a_list'发布您想要的输出。 – Ajax1234

+1

@Carcigenicate BS4不是一种选择。这不是我实际做的一个例子。这不是问题,问题在于标题。我需要分割两个字符,我不关心示例HTML。它始终显示相邻的“>”字符之间的分隔,这就是我所要做的。 – spikespaz

+0

@ Ajax1234示例列表是我需要的输出。 – spikespaz

回答

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>'] 
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正常工作。

+0

这不会输出任何东西。 – wpercy

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('><') ]]) 
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>'] 
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