本文介绍如何在 pandas 中利用正则表达式高效地将字段内连续出现的多个竖线 `|` 替换为仅一个,解决因重复分隔符导致的数据解析问题。
在数据清洗过程中,常遇到分隔符被意外重复的情况,例如字符串 '10SGD01AA103||||||10SGD01AA105' 中存在多个连续的竖线 |。若直接用 str.replace('|', '') 会删除所有竖线,而用错误的正则(如 '|(?=|\1+)')则因语法/逻辑错误无法匹配——关键在于:| 是正则中的特殊元字符,必须转义;且要匹配“一个或多个连续的 |”,应使用 \|+。
正确做法是使用 str.replace() 配合原始字符串(r'')和转义后的重复模式:
import pandas as pd
df = pd.DataFrame({'code': ['10SGD01AA103||||||10SGD01AA105||||||10SGD01AA111']})
df['code'] = df['code'].str.replace(r'\|+', '|')
print(df['code'].iloc[0])
# 输出:10SGD01AA103|10SGD01AA105|10SGD01AA111✅ 原理说明:
(转义避免被解析为“或”逻辑),+ 表示“前面的字符重复一次或多次”; ⚠️ 注意事项:
该方法简洁、高效,适用于全列批量处理,是 Pandas 文本清洗的标准实践之一。