Python移除括号外字符串:保留括号内内容及无括号行
解决方案:提取括号内内容并保留无括号行的原数据
你遇到的问题是因为str.extract在匹配不到正则时会返回NaN,而非原内容。这里提供两种可行的解决方法:
方法一:str.extract + fillna
利用extract捕获括号内的内容,再用原列数据填充匹配失败产生的NaN值:
df['test'] = df['test'].str.extract(r'\((.*)\)', expand=False).fillna(df['test'])
expand=False确保返回结果是Series而非DataFrame,方便后续填充fillna(df['test'])将未匹配到括号的行替换为原始内容
方法二:str.replace直接替换括号外内容
通过正则匹配括号外的所有内容,直接替换为括号内的捕获组,未匹配到括号的行将保留原内容:
df['test'] = df['test'].str.replace(r'.*\((.*)\).*', r'\1', regex=True)
- 正则
.*\((.*)\).*会匹配从开头到左括号、右括号到结尾的所有内容,仅捕获括号内的部分 - 替换为
\1(第一个捕获组)即可得到括号内的内容,无括号的行因不匹配正则,内容保持不变
测试验证
针对你提供的测试数据:
test (ABC) ABC(DEF)G ABC
两种方法处理后均会得到期望输出:
test ABC DEF ABC
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

