例子:

>>> convert('CamelCase')
'camel_case'

推荐答案

骆驼案到蛇案

import re

name = 'CamelCaseName'
name = re.sub(r'(?<!^)(?=[A-Z])', '_', name).lower()
print(name)  # camel_case_name

如果您多次这样做,而上面的过程很慢,请提前编译正则表达式:

pattern = re.compile(r'(?<!^)(?=[A-Z])')
name = pattern.sub('_', name).lower()

要特别处理更严重的情况(这不再是可逆的):

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

print(camel_to_snake('camel2_camel2_case'))  # camel2_camel2_case
print(camel_to_snake('getHTTPResponseCode'))  # get_http_response_code
print(camel_to_snake('HTTPResponseCodeXYZ'))  # http_response_code_xyz

要添加带有两个或更多下划线的大小写:

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

蛇箱到骆驼箱

name = 'snake_case_name'
name = ''.join(word.title() for word in name.split('_'))
print(name)  # SnakeCaseName

Python相关问答推荐

如果在第一行之前不存在其他条件,如何获得满足口罩条件的第一行?

使用itertools出现第n个子串

Odoo onchange for invoice_Status of sale事件.订单未触发

如何将桌子刮成带有Se的筷子/要求/Beautiful Soup ?

无法使用python.h文件; Python嵌入错误

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

使用GEKKO在简单DTE系统中进行一致初始化

如何使用SubProcess/Shell从Python脚本中调用具有几个带有html标签的参数的Perl脚本?

如何使用Jinja语法在HTML中重定向期间传递变量?

使用mySQL的SQlalchemy过滤重叠时间段

为什么tkinter框架没有被隐藏?

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

Pandas 滚动最接近的价值

Pandas 有条件轮班操作

通过Selenium从页面获取所有H2元素

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

如何在polars(pythonapi)中解构嵌套 struct ?

如何在solve()之后获得症状上的等式的值

如何使用表达式将字符串解压缩到Polars DataFrame中的多个列中?

删除marplotlib条形图上的底边