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

为何Pandas中含感叹号的字符串正则替换未生效?

解决Pandas中提取感叹号后内容的问题

嘿,我明白你遇到的困扰啦——想把Series里带感叹号的字符串替换成感叹号后面的内容,但原代码没生效对吧?这是因为Pandas的Series.replace()默认是全字符串匹配模式,不会自动识别正则表达式,得手动开启正则模式才行!

方法一:修正原代码,启用正则模式

只需要给replace()方法加上regex=True参数,就能让它按照正则规则处理了:

import pandas as pd
ser = pd.Series(['Aland Islands !Åland Islands', 'Reunion !Réunion', 'Zimbabwe'])
patt = r'.*!(.*)'
repl = lambda m: m.group(1)
# 加上regex=True关键参数
result = ser.replace(patt, repl, regex=True)
print(result)

运行后就能得到预期结果:

0    Åland Islands
1           Réunion
2          Zimbabwe
dtype: object

方法二:用str.extract更直接提取

因为我们的需求本质是提取感叹号后的内容,用str.extract()会更简洁直观,还能直接处理无匹配的情况:

# 提取分组内容,无匹配的用原字符串填充
result = ser.str.extract(r'!(.*)', expand=False).fillna(ser)
print(result)

这个方法的逻辑是:用正则!(.*)匹配感叹号及后面的内容,提取分组里的部分;对于没有感叹号的条目(比如Zimbabwe),extract会返回NaN,再用fillna(ser)把NaN替换成原字符串,效果和上面完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:26