如何从字符串列表中删除子字符串?

2024-09-28 01:24:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串列表,所有这些字符串都有一个公共属性,它们都是这样的"pp:actual_string"。我不确定子字符串"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)

有没有一种方法可以在不创建额外列表的情况下完成


Tags: 方法字符串in列表forstringindexlen
2条回答

虽然regex是一个功能强大得难以置信的工具,但使用“聪明的方法”并不一定是您不熟悉其原理的最佳方法

您的问题可以在不使用正则表达式的情况下解决,方法是使用^{}方法对:字符进行拆分,然后使用[-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']

以下是一些基于不同假设的选项

最明确的

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

如果要删除第一个:之前的任何内容

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

正则表达式:

与startswith

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

与split相同,但对'pp:'更为小心,速度较慢

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

相关问题 更多 >

    热门问题