You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式精准匹配姓名列中逗号后的Mr.、Mrs.等称谓

正则匹配修正方案

你当前的代码存在两个核心问题导致误匹配:

  • 正则表达式里的.属于特殊元字符,默认会匹配任意单个字符,未转义的情况下Mr.可以匹配Mrs、Mr1等所有以Mr开头且后面带任意一个字符的内容
  • 没有限定匹配位置在逗号之后,也没有做独立称谓的匹配限制,导致Mrs.里的Mr前缀被误识别

仅匹配Mr.的正确写法

正则表达式为 r',\s*Mr\.',对应代码修改为:

Mr = df.loc[df['Name'].str.contains(r',\s*Mr\.', case=False)]

语法说明:

  • 开头的,限定所有匹配必须出现在逗号之后,符合你的匹配范围要求
  • \s*适配逗号之后可能存在的0个或多个空格,兼容不同格式的源数据
  • \.对特殊元字符.做转义,仅能匹配字面量的点号,确保只会命中完整的Mr.字符串
  • 保留case=False参数可同时适配mr.、MR.等大小写写法

其余称谓的匹配写法

如果需要同时统计另外两个称谓,可直接复用逻辑:

  • 匹配Mrs.:Mrs = df.loc[df['Name'].str.contains(r',\s*Mrs\.', case=False)]
  • 匹配Miss.:Miss = df.loc[df['Name'].str.contains(r',\s*Miss\.', case=False)]

如果需要一次性统计三个称谓的出现次数,可以用提取分组的方式批量处理:

# 提取称谓到单独列
df['title'] = df['Name'].str.extract(r',\s*(Mr|Mrs|Miss)\.', case=False, expand=False)
# 直接统计各称谓出现次数
count_result = df['title'].value_counts()

内容的提问来源于stack exchange,提问作者mert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:54:04