1

我正在尝试从 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__)

我试图实现一个解决方案,其中生成块myclass检测从小写字母到大写字母的转换,但它非常程序化,不起作用,而且对于这样一个简单的任务来说变得太复杂了。

对解决问题的简单实施有什么建议吗?

4

3 回答 3

4

如果我正确理解您的要求,您想在 Case 边界上拆分骆驼大小写字符串。正则表达式在这里可以很方便

尝试以下实现

>>> ' '.join(re.findall("([A-Z][^A-Z]*)","MyClass")).strip()
'My Class'

如果名称不符合 CamelCase,则上述实现将失败。在这种情况下,使caps可选

>>> test_case = ["MyClass","My","myclass","my_class","My_Class","myClass"]
>>> [' '.join(re.findall("([A-Z]?[^A-Z]*)",e)) for e in test_case]
['My Class ', 'My ', 'myclass ', 'my_class ', 'My_ Class ', 'my Class ']
于 2013-01-17T15:56:14.140 回答
2

基于 Abhijit 的回答

def verbose_name(self, camelcase):
    return '_'.join(re.findall("([A-Z][^A-Z]*)", camelcase)).lower()
于 2013-01-17T15:58:21.187 回答
0

这个怎么样:

def verbose_name(self, camelcase)
    return re.sub(r'([a-z])([A-Z])',r'\1 \2', camelcase).lower()
于 2013-01-17T15:57:57.057 回答