全名"到“缩写名”
本文关键字:缩写 缩写名 quot 全名 | 更新日期: 2023-09-27 18:01:18
我们需要将全名转换为缩写名,其中输入的组合如下:
INPUT:[可选标题][姓名或首字母][姓氏]
OUTPUT:[可选title] [initial][姓氏]
- Andrew Smith先生
- A Smith先生
- 史密斯 安德鲁•史密斯
我自己也试过一些,结果好坏参半。
作为注释;这些名字"可以"包含特殊字符,而且没有中间名;因此,我们可以在列表中有一个名为 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
不区分大小写,并使用三个组作为替换(您没有说您使用哪种语言,因此我无法给出示例)
第一组匹配最后的标题,后跟一个空格,并捕获它。第二组匹配第一个单词的第一个字母,第三组捕获最后一个单词(姓氏)。在第二组和第三组之间有一个字符匹配,以匹配名称格式。