如何编写正则表达式精准匹配姓名列中逗号后的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
相关产品推荐
相关产品推荐

