全名"到“缩写名”

本文关键字:缩写 缩写名 quot 全名 | 更新日期: 2023-09-27 18:01:18

我们需要将全名转换为缩写名,其中输入的组合如下:

INPUT:[可选标题][姓名或首字母][姓氏]

OUTPUT:[可选title] [initial][姓氏]

  • Andrew Smith先生
  • A Smith先生
  • 史密斯
  • 安德鲁•史密斯
在上面所示的所有实例中,输出将是Mr A Smith(存在标题)或A Smith(不存在标题),我认为这将最好使用RegEx实现,尽管我不知道正确执行此操作的语法是什么。

我自己也试过一些,结果好坏参半。

作为注释;这些名字"可以"包含特殊字符,而且没有中间名;因此,我们可以在列表中有一个名为 James O'Reilly-Bond先生的人,他将导致Mr J O'Reilly-Bond

这是用c#编写的

全名"到“缩写名”

虽然不使用正则表达式当然是一种选择,但我理解不希望制作可能的标题列表。如果总是2个名字或3个带标题的名字,则可以使用(([A-Z])'S*)(?='s'S*$),如https://regex101.com/r/tR7kV2/1所示。

这个想法是你选择倒数第二个单词,这个单词在捕获组$1中,它的大写字母-在捕获组$2中,你用$2代替你的匹配

不要使用正则表达式。用空格分割字符串,然后独立地对每个组件进行推理要容易得多(如果第一个是Mr/Mrs/Ms,忽略它,否则取第一个字母)。

你可以通过一个regex演示来实现这一点:

((?:mr|ms) )?(.).* (.*)

标记i不区分大小写,并使用三个组作为替换(您没有说您使用哪种语言,因此我无法给出示例)

第一组匹配最后的标题,后跟一个空格,并捕获它。第二组匹配第一个单词的第一个字母,第三组捕获最后一个单词(姓氏)。在第二组和第三组之间有一个字符匹配,以匹配名称格式。