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

输入:[可选标题] [姓氏或名字的首字母] [姓氏]

输出:[可选标题] [首字母] [姓氏]


史密斯先生
史密斯先生
史密斯
安德鲁·史密斯


在所有情况下,如上所示,输出将是史密斯先生(有标题的地方)或史密斯先生(无标题的地方),我认为最好用RegEx来实现,尽管我不知道正确执行此操作的语法是什么。

我自己做了一些尝试,却只得到了混合(不正确)的结果。

注意:名称“可以”包含特殊字符,没有人使用中间名;所以我们可以在名单中有一个名叫James O'Reilly-Bond的人,他会导致J O'Reilly-Bond先生

这是用C#编写的

最佳答案

虽然当然不使用正则表达式是一种选择,但我知道不想列出可能的标题。如果它总是2个名称或3个标题,则可以使用(([A-Z])\S*)(?=\s\S*$)很好,如https://regex101.com/r/tR7kV2/1所示。

这个想法是,您选择倒数第二个单词,该单词在捕获组$ 1中,其大写字母-在捕获组$ 2中,将匹配项替换为$ 2。

关于c# - REGEX“全名”到“缩写名”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31248856/

10-11 23:15