python函数将camel case转换为snake cas

2024-04-30 05:48:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我设法用正则表达式拼凑出一个python函数,将camel转换为snake case,它适用于我的所有测试用例,但我仍然有几个问题。

1)这三个语句实际上都在做什么?

import re

test_cases = list()
test_cases.append('camelCase')
test_cases.append('camelCaseCase')
test_cases.append('camel2Case')
test_cases.append('camel12Case')
test_cases.append('camel12Case')
test_cases.append('camelCaseURL')
test_cases.append('camel2CaseURL')
test_cases.append('camel12CaseURL')
test_cases.append('camel12Case2URL')
test_cases.append('camel12Case12URL')
test_cases.append('CamelCase')
test_cases.append('CamelCaseCase')
test_cases.append('URLCamelCase')


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


for string in test_cases:
    print(string + ' -> ' + camel_to_snake(string))

结果是:

camelCase -> camel_case
camelCaseCase -> camel_case_case
camel2Case -> camel_2_case
camel12Case -> camel_12_case
camel12Case -> camel_12_case
camelCaseURL -> camel_case_url
camel2CaseURL -> camel_2_case_url
camel12CaseURL -> camel_12_case_url
camel12Case2URL -> camel_12_case_2_url
camel12Case12URL -> camel_12_case_12_url
CamelCase -> camel_case
CamelCaseCase -> camel_case_case
URLCamelCase -> url_camel_case

Tags: testreurlstringcasesnakecamelappend
1条回答
网友
1楼 · 发布于 2024-04-30 05:48:10

首先回答您的第二个问题,这似乎是完成此任务的一个非常合理的方法,但它可能不像其他方法那样易于维护,因为很难弄清楚它是如何工作的。

下面是每一行所做的细分:

  • string = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', string)
    在紧跟一个或多个小写字符的每个大写字符之前添加下划线,字符串开头除外。

  • string = re.sub('(.)([0-9]+)', r'\1_\2', string)
    在任何一组连续数字之前(字符串开头除外)添加下划线。

  • return re.sub('([a-z0-9])([A-Z])', r'\1_\2', string).lower()
    在前面有小写字符或数字的任何大写字符之前添加下划线,并将整个字符串转换为小写并返回。

相关问题 更多 >