基于Pandas提取文本中所有nameis标识后姓名并存入指定列
Pandas 文本列提取姓名解决方案
1. 基础需求(单条文本仅一个nameis:标识)
优化原有正则的兼容性,支持姓名前后多余空格、and前后无空格等边缘场景,无需提前做replace操作:
# 一步提取姓名和剩余内容 extract_df = df['column'].str.extract( r'nameis:\s*(?P<first_last_name>.*?)\s*(?:,|\band\b)', expand=True ) # 合并结果到原数据表 df = pd.concat([df, extract_df], axis=1)
正则逻辑说明:
nameis:\s*匹配前缀标识,忽略标识后的任意数量空格(?P<first_last_name>.*?)非贪婪匹配所有字符作为姓名,天然支持带空格的中间名格式\s*(?:,|\band\b)匹配姓名终止符:逗号或独立的and单词,忽略终止符前的任意空格
2. 进阶需求(单条文本含多个nameis:标识)
使用str.extractall提取所有匹配项,再按原行索引分组拼接即可:
# 提取所有匹配的姓名,返回带多重索引的结果 all_names = df['column'].str.extractall( r'nameis:\s*(?P<first_last_name>.*?)\s*(?:,|\band\b)' )['first_last_name'] # 按原行索引分组,同一行的多个姓名用逗号拼接,合并到原表 df['first_last_name'] = all_names.groupby(level=0).apply(','.join).fillna('')
以上代码适配你给出的示例场景,多nameis:的测试用例输出结果分别为joe doe,adrian muller、patric test,adam joe,符合需求。
内容的提问来源于stack exchange,提问作者scofx
相关产品推荐
相关产品推荐

