Python正则表达式实现无空格拼接重复姓名的去重处理
解决方案
不需要逐字符比对,直接用正则匹配整串重复规则就能实现,比逐字符遍历实现更简洁、执行效率更高。
核心实现逻辑
你的场景本质是识别「完整姓名字符串连续重复拼接2次及以上」的异常值,提取单次出现的有效姓名即可,对应正则模式为^(.+)\1+$:
^和$分别匹配字符串的开头、结尾,确保校验覆盖整个字符串内容,避免误匹配字符串局部的重复片段(.+)捕获长度≥1的连续子串,也就是我们要保留的单次有效姓名\1+匹配前面捕获的姓名片段连续出现1次及以上,合起来就匹配到「整个字符串由同一个姓名重复拼接而成」的异常格式
Pandas Series 实现代码
import pandas as pd # 构造测试样例 name_series = pd.Series([ "John Smith", "David BrownDavid Brown" ]) # 批量替换去重 clean_series = name_series.str.replace(r'^(.+)\1+$', r'\1', regex=True)
执行后得到的输出完全符合预期:
0 John Smith 1 David Brown dtype: object
方案适配说明
- 该规则同时兼容你之前遇到的带空格重复场景(比如
David Brown David Brown),不需要单独拆分规则处理 - 支持识别重复3次及以上的异常拼接(比如
Bob LeeBob LeeBob Lee会被正确处理为Bob Lee) - 不会误改局部重复的非目标数据(比如
John SmithSmith这类不是完整姓名重复的脏数据会保留原值,不会被错误截断) - 如果你的姓名库存在本身为重复结构的短合法姓名(比如
Lili、Yoyo这类),可以将正则调整为^(.{3,})\1+$,要求捕获的有效姓名长度至少3个字符,即可避免短名误判。
内容的提问来源于stack exchange,提问作者Osca
相关产品推荐
相关产品推荐

