Python:在两个字符之间拆分

Python:在两个字符之间拆分,python,regex,string,python-3.x,split,Python,Regex,String,Python 3.x,Split,假设我有一大堆没有换行符的HTML。我想把每个元素都放到一个列表中 诸如此类。在每个>之间拆分您可以尝试以下方法: import re a = "<head><title>Example Title</title></head>" data = re.split("><", a) new_data = [data[0]+">"]+["<" + i+">" for i in data[1:-1]] + ["<"

假设我有一大堆没有换行符的HTML。我想把每个元素都放到一个列表中

诸如此类。在每个>之间拆分您可以尝试以下方法:

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>']
您可以尝试以下方法:

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>']
这将在Python2.7.2中输出给定的列表,但它也应该在Python3中工作

这将在Python2.7.2中输出给定的列表,但它也应该在Python3中工作。

或者更简单,如下所示:

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('><') ]])
更简单的是:

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

在扩展示例中使用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>']

在扩展示例中使用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>']
根据其他人的回答,我做了这个

它不像我想要的那么干净,但似乎很管用。我原本不想在拆分后重新添加字符

在这里,我通过将两个字符组合成一个字符串,去掉了一个额外的参数。不管怎样

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
归功于@cforemanand@Ajax1234。

根据其他人的回答,我做了这个

它不像我想要的那么干净,但似乎很管用。我原本不想在拆分后重新添加字符

在这里,我通过将两个字符组合成一个字符串,去掉了一个额外的参数。不管怎样

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

归功于@cforemanand@Ajax1234。

请从列表中发布所需的输出。@Carcigenicate BS4不是选项。这是一个例子,不是我正在做的。这不是问题,问题在标题里。我需要在两个字符之间分割,我不关心示例HTML。它始终显示相邻>@Ajax1234之间的分割。示例列表是我需要的输出。@spikespaz请参阅的第二个答案。请从列表中发布所需的输出。@Carcigenicate BS4不是选项。这是一个例子,不是我正在做的。这不是问题,问题在标题里。我需要在两个字符之间分割,我不关心示例HTML。它始终显示相邻>@Ajax1234之间的分割。示例列表是我需要的输出。@spikespaz请参阅的第二个答案。这不会输出任何内容。这不会输出任何内容。