我们需要将全名转换为缩写名,其中输入的组合如下所示:
输入:[可选标题] [姓氏或名字的首字母] [姓氏]
输出:[可选标题] [首字母] [姓氏]
史密斯先生
史密斯先生
史密斯
安德鲁·史密斯
在所有情况下,如上所示,输出将是史密斯先生(有标题的地方)或史密斯先生(无标题的地方),我认为最好用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/