拆分字符串中的多个字符
split on multiple characters in string
我有一个文件名列表,需要根据字符串中的某个部分进行排序。但是,它只有在我将文件扩展名作为我的排序字典的一部分时才有效。如果文件是 .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)
这个returns错误"AttributeError: 'str' object has no attribute 're'"
我需要做什么才能在 _ 和 .拆分我的字符串进行排序时?我只想使用拆分进行排序,而不是重新形成字符串。
固定代码如下:
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])
我有一个文件名列表,需要根据字符串中的某个部分进行排序。但是,它只有在我将文件扩展名作为我的排序字典的一部分时才有效。如果文件是 .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)
这个returns错误"AttributeError: 'str' object has no attribute 're'"
我需要做什么才能在 _ 和 .拆分我的字符串进行排序时?我只想使用拆分进行排序,而不是重新形成字符串。
固定代码如下:
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])