python - 优雅的 Python 函数将 CamelCase 转换为 snake_case?

标签 python camelcasing

例子:

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

最佳答案

Camel 案到蛇案

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()

蛇皮套到 Camel 皮套

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

关于python - 优雅的 Python 函数将 CamelCase 转换为 snake_case?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1175208/

相关文章:

python - 通过telnet上传文件

python - 使用 python 生成 RA vs DEC 赤道坐标图

c# - 用正则表达式拆分 CamelCase

java - RegEx 拆分 camelCase 或 TitleCase(高级)

doctrine-orm - Doctrine 2 ORM 使用可恶的 CamelCase 创建类

Python - 在列中编写列表列表

python - Bootstrap Accordion 与 Django : How to only load the data for the open accordion section?

正则表达式和拆分驼峰

java - Camel Back 中的首字母缩略词

python - PyMongo 仅当它不存在时才创建索引