驼峰转蛇形命名及移除前缀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
相关产品推荐
相关产品推荐

