You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas移除字符串中多组指定子串时遇re.error报错求助

解决DataFrame列值移除指定子串的正则错误问题

错误原因分析

你遇到的re.error: unbalanced parenthesis错误,根源有三个:

  1. 正则特殊字符未转义:子串列表里的)是正则语法中的特殊符号,直接用|拼接成正则模式时,正则引擎会将其视为分组闭合符号,因无对应开括号导致括号不匹配报错。
  2. re.escape使用错误:你把re.escape用在了待处理的文本x上,实际应该转义的是要替换的子串,而非原始文本。
  3. 变量名不匹配:你定义的子串列表是char_lst,但代码里用了replace_char,这会触发NameError,属于笔误。

正确解决方案

方法1:apply结合转义后的正则模式

先对子串列表中的每个元素做正则转义,再拼接成模式执行替换:

import re
import pandas as pd

# 示例DataFrame
df = pd.DataFrame({'X': ['1. 苹果', '2) 香蕉', '3. 橙子', '4) 葡萄']})
char_lst = ['1.', '1)', '2.', '2)', '3.', '3)']

# 转义子串中的特殊字符,避免正则语法冲突
escaped_pattern = '|'.join([re.escape(char) for char in char_lst])

# 执行替换,注意不要转义原始文本x
df['X_cleaned'] = df['X'].apply(lambda x: re.sub(escaped_pattern, '', str(x)).strip())

方法2:pandas内置str.replace(更高效)

pandas字符串方法支持直接传入正则模式,比apply更适配大数据量场景:

df['X_cleaned'] = df['X'].str.replace(escaped_pattern, '', regex=True).str.strip()

补充说明

  • re.escape(char)会将子串中的特殊字符(如.、))转义为普通字符,让正则引擎按字面量匹配。
  • 末尾的.strip()用于移除替换后可能残留的空格,可根据实际需求选择保留或删除。

内容的提问来源于stack exchange,提问作者Jlow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:05:21