簡體   English   中英

如何從字符串列表中刪除子字符串?

[英]How to remove a substrings from a list of strings?

我有一個字符串列表,所有這些都有一個共同的屬性,它們都是 go 像這樣"pp:actual_string" 我不確定 substring "pp:"將是什么,基本上:充當分隔符; 之前的所有內容:不應包含在結果中。

我已經使用蠻力方法解決了這個問題,但我想看看一個聰明的方法,也許像正則表達式。

注意:有些字符串可能沒有這種"pp:string"格式,並且可能已經是一個完美的字符串,即沒有分隔符。

這是我目前的解決方案:

ll = ["pp17:gaurav","pp17:sauarv","pp17:there","pp17:someone"]
res=[]
for i in ll:
    g=""
    for j in range(len(i)):
        if i[j] == ':':
            index=j+1
    res.append(i[index:len(i)])

print(res)

有沒有一種方法可以在不創建額外列表的情況下做到這一點?

這里有幾個選項,基於不同的假設。

最明確的

if s.startswith('pp:'):
    s = s[len('pp:'):]  # aka 3

如果您想在第一個之前刪除任何內容:

s = s.split(':', 1)[-1]

常用表達:

與開始相同

s = re.sub('^pp:', '', s)

與 split 相同,但更小心 'pp:' 並且速度較慢

s = re.match('(?:^pp:)?(.*)', s).group(1)

雖然正則表達式是一個非常強大的工具,具有很多功能,但使用“聰明的方法”不一定是您不熟悉其原理的最佳主意。

您的問題可以通過使用str.split()方法拆分:字符並通過使用[-1]索引值返回最后一部分來表示最后(或唯一)字符串分裂的結果。 即使沒有: ,這也會起作用。

list_with_prefixes = ["pp:actual_string", "perfect_string", "frog:actual_string"]

cleaned_list = [x.split(':')[-1] for x in list_with_prefixes]
print(cleaned_list)

這是一個列表推導式,依次獲取每個字符串 ( x ),在:字符上拆分字符串,返回一個包含前綴(如果存在)和后綴的列表,並構建一個僅包含后綴的新列表(即拆分結果列表中的項目 [-1]。在此示例中,它返回:

['actual_string', 'perfect_string', 'actual_string']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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