DataFrame中使用正则表达式去除字符串末尾1-2位数字
解决方法
问题根源
你之前的代码有几个关键错误:
- 开启了
regex=False,这会让str.replace把你的正则表达式当成普通字符串去匹配,完全不会按正则逻辑处理 - 匹配的正则模式写得太死板,只能匹配特定结构的字符串,没法覆盖你给出的所有示例
- 替换内容用了正则语法,但同样因为
regex=False,这些语法会被直接当成普通字符输出,根本达不到效果
正确实现
针对你要去除字符串末尾1位或2位数字的需求,有两种简单可靠的写法:
方法一:直接替换末尾的1-2位数字
data['id'] = data['id'].str.replace(r'\d{1,2}$', '', regex=True)
\d{1,2}:匹配1到2位数字$:锚定字符串末尾,确保只替换最后面的数字- 必须设置
regex=True(pandas中默认是True,但显式写上更清晰)
方法二:提取末尾数字前的内容
如果需要更明确地提取目标部分,可以用str.extract:
data['id'] = data['id'].str.extract(r'^(.*?)\d{1,2}$')[0]
^(.*?):从字符串开头开始,非贪婪匹配所有内容,直到遇到末尾的1-2位数字\d{1,2}$:匹配末尾的1-2位数字extract会提取括号里的分组内容,也就是我们需要的部分
测试验证
用你给出的示例数据测试:
- 输入
App2Aa1→ 输出App2Aa - 输入
Cry10Aa4→ 输出Cry10Aa - 输入
Cry2Ac10→ 输出Cry2Ac
完全符合你的预期。
内容的提问来源于stack exchange,提问作者Kacper
相关产品推荐
相关产品推荐

