从指定索引处的字符串列表中删除不需要的子字符串

时间:2019-06-12 17:42:26

标签: python string list

python的新手,我想删除两个字符串的前缀。只是将所有内容都保留在J之前并删除.json。

我尝试使用[:1],但它会删除整个第一个字符串

ptr2

我要输出这个

name = ['190523-105238-J105150.json',
'190152-105568-J616293.json']

6 个答案:

答案 0 :(得分:1)

您可以在列表理解中使用split()

name = ['190523-105238-J105150.json',
'190152-105568-J616293.json']

print([x.rsplit('-', 1)[1].split('.')[0] for x in name])
# ['J105150', 'J616293']

答案 1 :(得分:1)

您可以使用find()函数和数组拼接。

name = ['190523-105238-J105150.json' ,'190152-105568-J616293.json']
for i in range(len(name)):
    start_of_json = name[i].find('.json')
    start_of_name = name[i].find('J')
    name[i] = name[i][start_of_name:start_of_json]

答案 2 :(得分:0)

列表最初是name = ['190523-105238-J105150.json', '190152-105568-J616293.json']

python中的

List comprehensions非常有用且功能强大。

eq = [name[i][name[i].find("J"):name[i].rfind(".json")] for i in range(len(name))],使用列表推导通过找到值name的开头并转到J,从列表before创建新的值列表。 .jsonfind()的结果为整数类型。

完整的代码如下。

def main():
    name = ['190523-105238-J105150.json', '190152-105568-J616293.json']
    eq = [name[i][name[i].find("J"):name[i].rfind(".json")] for i in range(len(name))]
    print(eq)


if __name__ == "__main__":
    main()

output: ['J105150', 'J616293']

答案 3 :(得分:0)

执行[:1]将对当前列表进行切片,以仅包含索引1之前的元素,因此仅存在索引0的元素。 这不是您想要的。 正则表达式可以帮助您实现目标。

import re
output = [re.search(r'-([\w+]).json', x).group(0) for x in your_list]

答案 4 :(得分:0)

以下是两种可能的方法:

一个更为冗长。另一种基本上做相同的事情,但是如果愿意的话,将其浓缩为单线。

方法1:

在方法1中,我们创建一个空列表来临时存储结果。

我们从此处解析连字符上的name.split()的每个项目。

对于每个项目,这将产生一个包含三个元素的列表:例如['190523', '105238', 'J105150.json']

我们使用索引[-1]仅选择最后一个元素,然后使用空白字符串.replace() .json文本''有效地删除.json

然后,我们将该项目添加到new_names列表中。

最后,我们覆盖了变量标签name,使其指向我们生成的新列表。

name = ['190523-105238-J105150.json', '190152-105568-J616293.json']

new_names = []
for item in name:
    item = item.split('-')[-1]
    new_names.append(item.replace('.json', ''))
name = new_names 

方法2:

name = ['190523-105238-J105150.json', '190152-105568-J616293.json']

name = [item.split('-')[-1].replace('.json', '') for item in name]

答案 5 :(得分:0)

首先,它不是数据帧,而是数组。

假设您具有静态结构,则可以使用下面的简单代码。

name = [x[x.index("J"):x.index(".")] for x in name]