如何在python中将名称更改为一些友好的名称?



我有几个虚拟函数名,我想转换它们如下:

示例案例1

input : getDataType
output: Data_Type

示例案例2

input: getDatasetID
output: Dataset_ID
我的代码如下:
def apiNames(funcName):
name = funcName.split("get")[1]
print(''.join('_' + char if char.isupper() else char
for char in name).lstrip('_'))
apiNames("getDataType")
apiNames("getDatasetID")

适用于情形1,但不适用于情形2

case 1输出:

Data_Type

case 2输出:

Dataset_I_D

只是为了好玩,这里有一个更健壮的camelCASEParser,它可以处理所有的"角落情况"。一点点的前瞻性会有很长的路要走。

>>> pattern = '^[a-z]+|[A-Z][a-z]+|[A-Z]+(?![a-z])'
>>> "_".join(re.findall(pattern, "firstWordsUPPERCASECornerCasesEtc"))
'first_Words_UPPERCASE_Corner_Cases_Etc'

是的,如果模式以大写span结束,它也可以工作。

>>> "_".join(re.findall(pattern, "andAShortPS"))
'and_A_Short_PS'

我很确定它适用于任何匹配^[a-zA-Z]+的序列。试试。

我认为regex是解决这个问题的更好途径。

考虑:

def apiNames(funcName):
name = funcName.split("get")[1]
print('_'.join([found for found in re.findall(r'[A-Z]*[a-z]*', name)][:-1]))

最新更新