本文详解如何在 pandas dataframe 中使用 `str.replace()` 配合正确转义的正则表达式,删除紧跟在 `aa` 前的未转义竖线 `|`,避免因忽略元字符特性导致替换失败。
在 Pandas 字符串处理中,str.replace() 的 regex=True 模式会将传入的字符串视为正则表达式解析。而竖线字符 | 在正则语法中是“或”操作符(alternation),属于特殊元字符——它不会被当作字面量管道符匹配,除非显式转义。
你原本的写法:
df['data'].str.replace('|(?=AA)', '', regex=True)实际等价于匹配“空字符串 或 后面紧接 AA 的位置”,这既无意义,也无法匹配到 | 字符本身,因此替换无效。
✅ 正确做法是:使用原始字符串(r'')并转义 | 为 \|,同时保留正向先行断言 (?=AA) 确保只删除后面紧跟 AA 的那个 |:
import pandas as pd
df = pd.DataFrame({'data': ['10SGD01|AA169|10SGD01|AA170']})
df['data'] = df['data'].str.replace(r'\|(?=AA)', '', regex=True)
print(df)
# data
# 0 10SGD01AA169|10SGD01AA170? 关键点说明:
AA 保留在结果中);⚠️ 注意事项:
通过理解正则元字符的语义与转义机制,你不仅能修复当前问题,还能举一反三地处理类似场景(如处理 +, *, ?, [, ^ 等需转义的符号)。