
使用 `str.replace(r'\|+', '|')` 可高效将连续多个竖线 `|` 替换为单个 `|`,关键在于正确转义竖线并匹配一个及以上重复。
在 Pandas 中处理字符串列时,若需将连续重复的特定字符(如竖线 |)压缩为单个字符,必须注意正则表达式中的特殊字符转义和量词匹配逻辑。
竖线 | 在正则中是“或”操作符,因此直接写 |+ 会导致语法错误或意外行为。正确做法是使用反斜杠转义:\|+,其中:
- \| 表示字面意义的竖线字符;
- + 表示“前一项出现一次或多次”。
因此,以下代码可精准实现去重:
df["code"] = df["code"].str.replace(r'\|+', '|', regex=True)
✅ 推荐使用原始字符串 r'\|+' 避免反斜杠被 Python 字符串解析干扰; ✅ regex=True(Pandas 1.3+ 默认开启,但显式声明更稳妥)确保启用正则引擎; ❌ 错误示例 '|(?=|\1+)' 存在多重问题:未转义 |、\1 引用不存在的捕获组、正向先行断言逻辑不适用此场景。
验证效果:
import pandas as pd
df = pd.DataFrame({'code': ['10SGD01AA103||||||10SGD01AA105||||||10SGD01AA111']})
df["code"] = df["code"].str.replace(r'\|+', '|', regex=True)
print(df["code"].iloc[0])
# 输出:10SGD01AA103|10SGD01AA105|10SGD01AA111该方法简洁、高效,适用于任意长度的连续竖线(如 ||、|||||),且可轻松扩展至其他需压缩重复字符的场景(如空格 r'\s+'、连字符 r'-+' 等),只需替换对应转义字符即可。










