尝试编写一个正则表达式,可以解析全名并将其拆分为名字、中间名、姓氏。这应该很容易,但一旦你看到我必须解析的名称类型,就会变得相当困难。现在我可以编写一个长的正则表达式来考虑所有这些不同的情况,但我认为更小的动态正则表达式是可能的,这就是为什么我在这里寻求一些帮助。
我认为这些都是我必须捕获的名字类型。
需要解析的一些示例名称是(每个名称末尾有三个逗号):
(first name) (middle intial). (last name),,, //one middle initial with period after
(first name) (last name),,, //simple first and last
(No name),,, //no name
(first name) (last name)-(last name),,, //two last names separated by a dash
(first name) (middle initial). (middle initial). (last name),,, //two middle initials with space inbetween
(first name) (last name w/ apostrophe),,, //Last names with apostrophes
(first name) (Middle name) (Last name),,, //first middle and last name
最佳答案
你无法解析最终不遵循规则的东西并希望获得任何成功。问题不在于将算法转换为正则表达式,而在于从头开始编写算法。
考虑一下:您将如何编写一个算法来正确地将所有这些名字解析为名字、中间名和姓氏?
- 鲍勃·麦克·因托什
- 玛丽·简·沃森
- 瑟斯顿·鲍威尔三世
- 迈克尔·范德维尔登
- 杰奎琳·肯尼迪·奥纳西斯
- 博士。琴·格雷
- 高桥四郎
- 米歇尔·拉封丹
- 亚历克·吉尼斯爵士
- 玛丽-苏·鲍斯-里昂
- 萨莎·拜伦·科恩
- 小 jack ·阿诺德
明白我的意思了吗?你需要一个人工智能能够将这些单词中的每一个正确地分块到正确的上下文中。有些人使用两个名字作为他们的“名字”。有些人使用头衔或敬语,而有些文化则将姓氏放在前面,名放在最后。
摘要:不要这样做。如果您无法让用户将他们的名字分成特定的 block ,您必须将它们视为原子。
关于regex - 使用 Perl 正则表达式解析名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9434023/