You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将函数名转为友好命名?现有代码处理连续大写字符出错

修正驼峰命名转下划线格式的代码(处理连续大写字符)

需求回顾

需要将以get开头的驼峰式函数名转换为指定格式:

  • 输入 getDataType → 输出 Data_Type
  • 输入 getDatasetID → 输出 Dataset_ID

原代码问题

原代码会给每个大写字母前都添加下划线,导致连续大写字符(如ID)被错误拆分,输出Dataset_I_D而非预期的Dataset_ID。

解决方案

方案1:遍历字符判断(直观易懂)

通过遍历每个字符,仅在「大写字母前是小写字母」的场景下添加下划线,避免连续大写字符被拆分:

def apiNames(funcName):
    name = funcName.split("get")[1]
    result = []
    for idx, char in enumerate(name):
        if char.isupper():
            # 只有当前大写字母的前一个字符是小写时,才添加下划线
            if idx > 0 and name[idx-1].islower():
                result.append('_')
            result.append(char)
        else:
            result.append(char)
    print(''.join(result))

# 测试
apiNames("getDataType")   # 输出 Data_Type
apiNames("getDatasetID")  # 输出 Dataset_ID

方案2:正则表达式(简洁高效)

利用正则表达式的断言功能,精准匹配需要添加下划线的位置:

import re

def apiNames(funcName):
    name = funcName.split("get")[1]
    # 匹配两种需要加下划线的场景:
    # 1. 小写字母紧跟大写字母(如 t → I)
    # 2. 连续大写字母的最后一个大写字母后跟小写字母(如 C → d,用于处理 ABCdef → ABC_def 的场景)
    formatted_name = re.sub(r'(?<=[a-z])([A-Z])|(?<=[A-Z])([A-Z])(?=[a-z])', r'_\1\2', name)
    print(formatted_name)

# 测试
apiNames("getDataType")   # 输出 Data_Type
apiNames("getDatasetID")  # 输出 Dataset_ID
apiNames("getABCdef")     # 输出 ABC_def(额外测试连续大写后跟小写的场景)

验证结果

两种方案都能正确处理示例中的场景,同时兼容连续大写字符后跟小写字母的边界情况。

内容的提问来源于stack exchange,提问作者Sushant Shelke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:53:31