regex - 按姓氏字母顺序对字符串元胞数组进行排序

标签 regex matlab sorting names

在 Matlab 中,我有一个像这样的元胞数组:

names = {
    'John Doe',
    'Jane Watkins',
    'Jeremy Jason Taylor',
    'Roger Adrian'
    }

我想对这些进行排序,以便姓氏按字母顺序显示。在我的例子中,结果是:

names_sorted = {
    'Roger Adrian',
    'John Doe',
    'Jeremy Jason Taylor',
    'Jane Watkins'
    }

我知道这样做的一些不优雅的方法。例如,我可以在空间进行标记,创建一个单独的 last_names 元胞数组,对其进行排序,然后将索引应用到我的原始数组。

我的问题是,有更好的方法吗?

因为肯定有人会提出一系列你无法对数据库中的人名做出的假设,所以我向你保证,我所有的名字都是“FIRST MIDDLE LAST”“FIRST LAST”。我查了一下。

最佳答案

如果所有名字都具有相同的长度,那么您将能够使用sortrows,但在您的情况下,无论如何,这将需要填充和修改您的数组,以便您更好在应用排序之前,不要将其转换为“LAST FIRST MIDDLE”。幸运的是,有一个简单的正则表达式可以实现这一点:

names = {'John Doe';'Roger Adrian';'John Fitzgerald Kennedy'};
names_rearranged = regexprep(names,'(.*) (\w*)$','$2 $1')
names_rearranged = 
    'Doe John'
    'Adrian Roger'
    'Kennedy John Fitzgerald'

[names_rearranged_sorted, idx_sorted] = sort(names_rearranged);

names_sorted = names(idx_sorted)
names_sorted = 
    'Roger Adrian'
    'John Doe'
    'John Fitzgerald Kennedy'

关于regex - 按姓氏字母顺序对字符串元胞数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9757957/

相关文章:

sorting - OCaml - 如何对对进行排序?

arrays - 如何在遵循相同顺序的情况下更改数组的起始项和结束项?

python - 正则表达式从Python文件中提取多行行

javascript - 为什么积极的前瞻性不能作为第一个捕获组?

R:如何使用 RegEx 使用析取来搜索多个单词

ios - 使用加速度计的 iOS 位置估计

arrays - 将矩阵乘以向量

matlab - 带或不带句柄的嵌套 classdef?

c - 排序 2 个数组 - 一个字符和一个整数

正则表达式,两个字符之间的所有内容(转义字符除外)