有的时候,我们需要将字符串来排序,而该字符串又是有一定规律的,比如上面嵌套了数字,如"file2.txt file11.txt file8.txt file5.txt"排列成"file2.txt file5.txt file8.txt file11.txt",因为Python默认的字符串排序是基于字符ASCII来排序的,一般file11.txt是在file2.txt,如果要实现上面的需求,要如何处理呢?
import re
re_digits = re.compile(r'(\d+)')
def embedded_numbers(s):
pieces = re_digits.split(s) # 切成数字和非数字
pieces[1::2] = map(int, pieces[1::2]) # 将数字部分转成整数
return pieces
def sort_string(lst):
return sorted(lst, key=embedded_numbers) # 将前面的函数作为key来排序
files = "file2.txt file8.txt file11.txt file5.txt"
files = files.split(' ')
print(' '.join(sort_string(files)))
使用了上面的处理后,就可以将内嵌的数字进行排序了。 排列的结果就是我们想要的了。
>>> file2.txt file5.txt file8.txt file11.txt
>>>