簡體   English   中英

Python:在兩個字符之間分割

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM