[英]Python: Split between two characters
假設我有很多沒有換行符的HTML。 我想將每個元素放入列表。
input = "<head><title>Example Title</title></head>"
a_list = ["<head>", "<title>Example Title</title>", "</head>"]
這樣的東西。 在每個><
之間分割。
但是在Python中,我不知道這樣做的方法。 我只能在拆分該字符串,它從輸出中刪除。 我想保留它,並在兩個相等運算符之間分配。
如何才能做到這一點?
編輯:最好做到這一點,而無需將字符重新添加到每個列表項的末尾。
您可以嘗試以下方法:
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>']
# 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中工作。
在擴展示例上使用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
功勞歸@cforeman
和@Ajax1234
。
或更簡單地說,這是:
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('><') ]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.