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

Python 从指定索引处的字符串列表中删除不需要的子字符串,python,string,list,Python,String,List,python新手,我想删除两个Sting的前缀。只需将所有内容放在J之前,并删除.json 我尝试使用[:1],但它删除了整个第一个字符串 name = ['190523-105238-J105150.json', '190152-105568-J616293.json'] 我想输出这个 name = ['J105150', 'J616293'] 您可以在列表中使用split(): name = ['190523-105238-J105150.json', '190152-105568-J6

python新手,我想删除两个Sting的前缀。只需将所有内容放在J之前,并删除.json

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

name = ['190523-105238-J105150.json',
'190152-105568-J616293.json']
我想输出这个

name = ['J105150',
'J616293']
您可以在列表中使用
split()

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

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

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

python中的列表理解非常有用和强大

eq=[name[i][name[i].find(“J”):name[i].rfind(.json”)]对于范围内的i(len(name))]
,使用列表理解从列表
name
创建一个新的值列表,方法是查找从值
J
开始并转到
之前的
find()
的结果是整数类型

完整的代码可以在下面看到

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()

输出:['J105150','J616293']

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

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

以下是两种可能的方法:

一个更冗长。另一个基本上做相同的事情,但是如果你愿意的话,可以把它压缩成一行

方法1:

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

name = [item.split('-')[-1].replace('.json', '') for item in name]
在方法1中,我们创建一个空列表来临时存储结果

从这里,我们解析连字符上的
name
.split()
每个项目

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

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

然后,我们将该项附加到
新名称列表中

最后,我们覆盖变量标签
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]

首先,它不是一个数据帧,而是一个数组

假设您有静态结构,您可以使用下面一行中的简单内容

name = [x[x.index("J"):x.index(".")] for x in name]
您可以使用
find()
函数和数组拼接

name=['190523-105238-J105150.json','190152-105568-J616293.json']
对于范围内的i(len(name)):
start_of_json=name[i]。查找('.json')
start\u of_name=name[i]。查找('J')
name[i]=name[i][start\u of_name:start\u of_json]