#解法一
#来排个序
import re
def order(text):
if len(text)==0:return ""
arr=text.split()
#把字符串里面非数字的,替换为'' ^在中括号里代表非 一个或者几个
arr_index=[re.sub('[^\d+]','',each) for each in arr] # ['2','1',,'4','3']
new_arr=[each[1] for each in sorted(zip(arr_index,arr),key=lambda x:x[0])]
#zip返回元组,[('2', 'is2'), ('1', 'This1'), ('4', 'T4est'), ('3', '3a')]
#sorted返回 ('1', 'This1') ('2', 'is2') ('3', '3a') ('4', 'T4est')
return (' '.join(new_arr))
order('is2 This1 T4est 3a')
#python中,int的数字和string的数字都能排序
students = [('john', 'A', '15'), ('jane', 'B', '12'), ('dave','B', '10')]
print(sorted(students,key=lambda x: x[2]))
#[('dave', 'B', '10'), ('jane', 'B', '12'), ('john', 'A', '15')]
#解法二
import re
def order(strings):
#?表示非贪婪模式尽可能少地匹配所搜索的字符串
#re.search().group()一般等价于re.findall()
sort_strings=sorted(strings.split(),key=lambda s:re.findall(r'\d+?',s))
return ' '.join(sort_strings)
order('is2 This1 T4est 3a')
#解法三
#对给定的字符排个序
import re
a='three3 one1 two2'
b=a.split()
a=sorted(b,key=lambda i:sorted(i))
print(' '.join(a))
参考:
正则的示例用法