我想獲取一個字串并使用分隔符從中創建一個串列,同時保留分隔符。
如果有,"A56-3#AJ4klAP0W"我想回傳一個以 A 作為分隔符的串列。
[A56-3#, AJ4kl, AP0W]
我試過 split 和 slice 但沒有成功。我確實做了串列理解以獲取每個分隔符的索引串列,但無法對其進行太多處理 [0, 6, 11]
uj5u.com熱心網友回復:
您可以使用正則運算式和findall()函式。
>>> re.findall('A?[^A] ', 'A56-3#AJ4klAP0W')
['A56-3#', 'AJ4kl', 'AP0W']
這甚至適用于字串不以分隔符開頭的情況。例如
>>> re.findall('A?[^A] ', '56-3#AJ4klAP0W')
['56-3#', 'AJ4kl', 'AP0W']
說明:(Regex101)
A? : Zero or one "A"
[^A] : Followed by one or more "not A"
使用 f 字串很容易構建正則運算式:
def get_substrings(delim, s):
rex = f"{delim}?[^{delim}] "
return re.findall(rex, s)
uj5u.com熱心網友回復:
鑒于:
st="A56-3#AJ4klAP0W"
您可以使用 enumerate 獲取每個分隔符的索引:
idx=[i for i,ch in enumerate(st) if ch=='A']
然后使用該索引對字串進行切片:
>>> [st[x:y] for x,y in zip([0] idx, idx[1:] [len(st)])]
['A56-3#', 'AJ4kl', 'AP0W']
# this is how you use the [0,6,11] list in your question
您還可以使用正則運算式拆分:
>>> re.split(r'(?=A)', st)
['', 'A56-3#', 'AJ4kl', 'AP0W']
或者找到滿足該條件的子字串(而不是拆分):
>>> re.findall(r'A*[^A] ', st)
['A56-3#', 'AJ4kl', 'AP0W']
uj5u.com熱心網友回復:
只需將其添加回:
>>> x = 'A56-3#AJ4klAP0W'
>>> x.split('A')
['', '56-3#', 'J4kl', 'P0W']
>>> ['A' k for k in x.split('A') if k]
['A56-3#', 'AJ4kl', 'AP0W']
>>>
uj5u.com熱心網友回復:
>>> [f'A{el}' for el in "A56-3#AJ4klAP0W".split('A') if el]
['A56-3#', 'AJ4kl', 'AP0W']
>>>
uj5u.com熱心網友回復:
mystr = "A56-3#AJ4klAP0W"
delim = "A"
lst = mystr.split(delim)
lst = [delim x for x in lst if x != '']
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/362741.html
上一篇:按索引置換字串
下一篇:如何用函式做字串替換字符?
