python驼峰转下划线,下划线转驼峰

举报
福州司马懿 发表于 2025/09/22 17:27:03 2025/09/22
【摘要】 在Python中,可以通过编写函数实现驼峰命名法(CamelCase)与下划线命名法(snake_case)的相互转换。以下是两种转换的实现方法: 1. 驼峰转下划线(CamelCase → snake_case)import redef camel_to_snake(name): # 在大写字母前插入下划线,然后转为小写 s1 = re.sub('(.)([A-Z][a-z]+...

在Python中,可以通过编写函数实现驼峰命名法(CamelCase)与下划线命名法(snake_case)的相互转换。以下是两种转换的实现方法:


1. 驼峰转下划线(CamelCase → snake_case)

import re

def camel_to_snake(name):
    # 在大写字母前插入下划线,然后转为小写
    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()

# 示例
print(camel_to_snake("CamelCase"))      # 输出: camel_case
print(camel_to_snake("XMLParser"))      # 输出: xml_parser

原理

  1. 使用正则表达式匹配大写字母前的位置,插入下划线。
  2. 将所有字母转为小写。

2. 下划线转驼峰(snake_case → CamelCase)

小驼峰(首字母小写,如 camelCase):

def snake_to_camel(name):
    components = name.split('_')
    return components[0] + ''.join(x.title() for x in components[1:])

# 示例
print(snake_to_camel("snake_case"))     # 输出: snakeCase

大驼峰(首字母大写,如 CamelCase):

def snake_to_pascal(name):
    return ''.join(x.title() for x in name.split('_'))

# 示例
print(snake_to_pascal("snake_case"))    # 输出: SnakeCase

原理

  1. 按下划线分割字符串。
  2. 将每个单词的首字母大写(title()),然后拼接。
  3. 小驼峰保留第一个单词的首字母小写。

完整代码示例

import re

def camel_to_snake(name):
    s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()

def snake_to_camel(name):
    components = name.split('_')
    return components[0] + ''.join(x.title() for x in components[1:])

def snake_to_pascal(name):
    return ''.join(x.title() for x in name.split('_'))

# 测试
print(camel_to_snake("CamelCase"))       # camel_case
print(snake_to_camel("snake_case"))      # snakeCase
print(snake_to_pascal("snake_case"))     # SnakeCase

注意事项

  1. 连续大写字母:如 XMLParser 会被转为 xml_parser(可能不符合某些规范,需根据需求调整)。
  2. 数字处理:上述代码已支持带数字的命名(如 var1Namevar1_name)。
  3. 性能:正则表达式适合大多数场景,但对超长字符串可能需优化。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。