优雅的Python函数将CamelCase转换为snake_case? [英] Elegant Python function to convert CamelCase to snake_case?

查看:104
本文介绍了优雅的Python函数将CamelCase转换为snake_case?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

示例:

<预><代码>>>>转换('驼峰式')'骆驼香烟盒'

解决方案

Camel case to snake case

import rename = 'CamelCaseName'name = re.sub(r'(?<!^)(?=[A-Z])', '_', name).lower()打印(名称)#camel_case_name

如果你这样做了很多次而且上面的速度很慢,请事先编译正则表达式:

pattern = re.compile(r'(?

要特别处理更高级的情况(这不再可逆):

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()打印(camel_to_snake('camel2_camel2_case'))#camel2_camel2_case打印(camel_to_snake('getHTTPResponseCode')) # get_http_response_code打印(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)返回名称.lower()

蛇案到骆驼案

name = 'snake_case_name'name = ''.join(word.title() for word in name.split('_'))打印(名称)# SnakeCaseName

Example:

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

解决方案

Camel case to snake case

import re

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

If you do this many times and the above is slow, compile the regex beforehand:

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

To handle more advanced cases specially (this is not reversible anymore):

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

To add also cases with two underscores or more:

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

Snake case to camel case

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

这篇关于优雅的Python函数将CamelCase转换为snake_case?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆