修正rearrange_name函数正则表达式,适配中间名、双姓氏等格式
修复rearrange_name函数的正则表达式问题
原代码的正则表达式^(\w*), (\w*)$存在两个核心问题:
\w仅匹配字母、数字和下划线,无法识别名字里的点号(比如F.)、姓氏里的空格/连字符(比如双姓氏)*允许匹配空字符,且只能捕获单一连续的字符块,没法处理包含中间名的多部分名字
下面是修复后的代码:
import re def rearrange_name(name): # 匹配带特殊字符的姓氏(空格、连字符、单引号)和带点/空格的名字部分 result = re.search(r"^([\w\s'-]+), ([\w\s'.]+)$", name) if result is None: return name return "{} {}".format(result[2], result[1]) # 测试示例 name = rearrange_name("Kennedy, John F.") print(name) # 输出: John F. Kennedy # 额外测试场景 print(rearrange_name("de la Cruz, Maria")) # 输出: Maria de la Cruz print(rearrange_name("Smith-Jones, Robert")) # 输出: Robert Smith-Jones print(rearrange_name("O'Neil, Anne M")) # 输出: Anne M O'Neil
正则修改说明
- 第一个捕获组
([\w\s'-]+):允许姓氏包含空格、连字符、单引号,覆盖双姓氏、带前缀的姓氏等场景 - 第二个捕获组
([\w\s'.]+):允许名字包含空格、点号、单引号,覆盖中间名、带点的首字母等场景 - 使用
+代替*:确保捕获的内容至少有一个字符,避免无效的空匹配
内容的提问来源于stack exchange,提问作者Yilin Zuo
相关产品推荐
相关产品推荐

