Python:在两个字符之间拆分

时间:2017-08-15 19:27:35

标签: python regex string python-3.x split

假设我有大量HTML没有换行符。我想将每个元素放入列表中。

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

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

像这样的东西。在每个><之间拆分。

但在Python中,我不知道如何做到这一点。我只能将分割为该字符串,将其从输出中删除。我想保留它,并在两个相等运算符之间分配。

如何做到这一点?

编辑最好不要将字符添加回每个列表项的末尾。

5 个答案:

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