根据第一个字符对字符串进行排序

问题描述:

我有一个由几个字符串组成的单元格数组

I have an cell array composed by several strings

names = {'2name_19surn', '3name_2surn', '1name_2surn', '10name_1surn'}

,我想根据前缀编号对它们进行排序.

and I would like to sort them according to the prefixnumber.

我尝试过

[~,index] = sortrows(names.'); 
sorted_names = names(index); 

但我知道

sorted_names = {'10name_1surn', '1name_2surn', '2name_19surn', '3name_2surn'}

而不是期望的

sorted_names = {'1name_2surn', '2name_19surn', '3name_2surn','10name_1surn'}

有什么建议吗?

使用正则表达式的简单方法:

Simple approach using regular expressions:

r = regexp(names,'^\d+','match'); %// get prefixes
[~, ind] = sort(cellfun(@(c) str2num(c{1}), r)); %// convert to numbers and sort
sorted_names = names(ind); %// use index to build result