分割字符串中的多个字符

时间:2020-02-14 21:47:20

标签: python regex string split attributeerror

我有一个文件名列表,我需要根据文件名中的一个部分对文件名进行排序。但是,仅当我使文件扩展名成为我的排序字典的一部分时,它才起作用。如果文件是.jpg或.png,我希望它能正常工作,因此我想同时对'_'和'。字符。

sorting = ['FRONT', 'BACK', 'LEFT', 'RIGHT', 'INGREDIENTS', 'INSTRUCTIONS', 'INFO', 'NUTRITION', 'PRODUCT']

filelist = ['3006345_2234661_ENG_PRODUCT.jpg', '3006345_2234661_ENG_FRONT.jpg', '3006345_2234661_ENG_LEFT.jpg', '3006345_2234661_ENG_RIGHT.jpg', '3006345_2234661_ENG_BACK.jpg', '3006345_2234661_ENG_INGREDIENTS.jpg', '3006345_2234661_ENG_NUTRITION.jpg', '3006345_2234661_ENG_INSTRUCTIONS.jpg', '3006345_2234661_ENG_INFO.jpg']

sort = sorted(filelist, key = lambda x : sorting.index(x.re.split('_|.')[3]))

print(sort)

这将返回错误“ AttributeError:'str'对象没有属性're'”

我需要做些什么来拆分_和。拆分字符串进行排序时?我只想将拆分用于排序,而不是用于重组字符串。

1 个答案:

答案 0 :(得分:5)

这是固定代码:

sorted_output = sorted(filelist,key=lambda x: sorting.index(re.split(r'_|\.',x)[3])) 

输入到re.split()的字符串应作为第二个参数传递给函数;您不会在字符串上调用re.split()。第一个参数是您正确的正则表达式本身。

另外:您需要用.来使\转义,因为句号或句点是正则表达式中的特殊字符,可以匹配所有内容。

输出:

In [13]: sorted(filelist,key=lambda x: sorting.index(re.split(r'_|\.',x)[3]))                       
Out[13]: 
['3006345_2234661_ENG_FRONT.jpg',
 '3006345_2234661_ENG_BACK.jpg',
 '3006345_2234661_ENG_LEFT.jpg',
 '3006345_2234661_ENG_RIGHT.jpg',
 '3006345_2234661_ENG_INGREDIENTS.jpg',
 '3006345_2234661_ENG_INSTRUCTIONS.jpg',
 '3006345_2234661_ENG_INFO.jpg',
 '3006345_2234661_ENG_NUTRITION.jpg',
 '3006345_2234661_ENG_PRODUCT.jpg']

编辑:正如@Todd在评论中提到的那样,如果您要另外确保字符串在第一次排序后按数字部分 进行排序,则使用:

sorted(filelist,key=lambda x: [sorting.index(re.split(r'_|\.',x)[3]),x])