Python 从CamelCase生成详细名称

Python 从CamelCase生成详细名称,python,string,camelcasing,Python,String,Camelcasing,我试图从Python中的CamelCase字符串中获取详细的名称,但不知道如何解决这个问题 这是用例: class MyClass(object): def verbose_name(self, camelcase): return "my class" # ^-- here I need a way to calculate the # value using the camelcase argument def __s

我试图从Python中的CamelCase字符串中获取详细的名称,但不知道如何解决这个问题

这是用例:

class MyClass(object):
    def verbose_name(self, camelcase):
        return "my class"
        # ^-- here I need a way to calculate the
        #     value using the camelcase argument

    def __str__(self):
        return self.verbose_name(self.__class__.__name__)
我试图实现一个解决方案,其中生成的块和类检测从小写字母到大写字母的转换,但这是非常程序化的,不起作用,而且对于这样一个简单的任务来说变得太复杂


有没有关于解决此问题的简单实现的建议?

如果我正确理解您的需求,您希望在案例边界上拆分一个驼峰大小写字符串。正则表达式在这里非常方便

尝试以下实现

>>> ' '.join(re.findall("([A-Z][^A-Z]*)","MyClass")).strip()
'My Class'
如果名称不符合大小写,上述实现将失败。在这种情况下,将caps设置为可选


如果我正确理解了您的需求,那么您希望在案例边界上拆分一个驼峰案例字符串。正则表达式在这里非常方便

尝试以下实现

>>> ' '.join(re.findall("([A-Z][^A-Z]*)","MyClass")).strip()
'My Class'
如果名称不符合大小写,上述实现将失败。在这种情况下,将caps设置为可选

这个怎么样:

def verbose_name(self, camelcase)
    return re.sub(r'([a-z])([A-Z])',r'\1 \2', camelcase).lower()
这个怎么样:

def verbose_name(self, camelcase)
    return re.sub(r'([a-z])([A-Z])',r'\1 \2', camelcase).lower()

基于阿比吉特的答案

def verbose_name(self, camelcase):
    return '_'.join(re.findall("([A-Z][^A-Z]*)", camelcase)).lower()

基于阿比吉特的答案

def verbose_name(self, camelcase):
    return '_'.join(re.findall("([A-Z][^A-Z]*)", camelcase)).lower()

啊!芬德尔!。。。我试图在\B上使用某种奇怪的re.split拆分形式,并使用一个前瞻性断言,即下一个内容是大写字母。。。这好多了,啊!芬德尔!。。。我试图在\B上使用某种奇怪的re.split拆分形式,并使用一个前瞻性断言,即下一个内容是大写字母。。。这个好多了。