我们需要将全名转换为缩写名,其中输入的组合变化如下:
输入:[可选标题] [名字或首字母] [姓氏]
输出:[可选标题] [初始] [姓氏]
- 安德鲁·史密斯先生
- 史密斯先生
- 史密斯
- 安德鲁·史密斯
在所有情况下,如上所示,输出将是 Mr A Smith(有头衔的地方)或 A Smith(没有头衔的地方),并且我认为这最好通过 RegEx 实现,尽管我不知道正确执行此操作的语法是什么。
我自己尝试了一些,只得到了混合(不正确)的结果。
作为注释;名字“可能”包含特殊字符,没有人有中间名;所以我们可以在列表中添加一个名为 Mr 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 替换你的匹配项。