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

驼峰转蛇形命名及移除前缀set异常:开头多下划线且末尾丢字符

问题排查与修复方案

首先看你的代码,有几个明显的问题导致了错误结果:

1. 无用的CamelCase函数

你定义了这个函数但完全没用到——里面的re.search结果既没返回也没修改原字符串,相当于空函数,对最终结果没有任何影响。

2. 用strip('set')移除前缀是错误的

strip()的作用是移除字符串两端的指定字符集合(这里是s、e、t三个独立字符),而不是精准去掉开头的"set"前缀。比如当正则转换后字符串变成set_Student_Number,strip('set')只会去掉开头的s、e、t,留下开头的下划线,这就是你看到结果开头多下划线的原因。

3. 前缀处理顺序导致的字符异常

你先做了驼峰转蛇形的正则转换,再去处理前缀,这种顺序会让前缀和后面的字符被正则拆分,间接导致了最后一个字符丢失的问题。

修正后的代码

import re

def convert(name):
    # 第一步:精准移除开头的"set"前缀
    without_set = re.sub(r'^set', '', name)
    # 第二步:驼峰转蛇形的正则转换
    s1 = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', without_set)
    return re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', s1)

print(convert("setStudentNumber"))  # 输出: Student_Number

修正点说明:

  • 用re.sub(r'^set', '', name)精准替换开头的"set",确保只去掉前缀,不会误删其他位置的字符。
  • 调整了处理顺序:先移除前缀,再做驼峰转蛇形的转换,避免前缀干扰正则匹配逻辑。
  • 删掉了完全没用的CamelCase函数,简化代码结构。

测试一下,输入setStudentNumber会得到预期的Student_Number,既没有开头下划线,也不会丢失最后一个字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:59:20