我正在尝试从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__)
我尝试实现一个解决方案,其中生成了块my
和class
,检测从大写字母到大写字母的转换,但是它非常程序化,不起作用,并且它变得太复杂了简单的任务。
有任何建议可以通过简单的方法来解决问题吗?
答案 0 :(得分: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 ']
答案 1 :(得分:2)
以Abhijit的回答为基础
def verbose_name(self, camelcase):
return '_'.join(re.findall("([A-Z][^A-Z]*)", camelcase)).lower()
答案 2 :(得分:0)
这个怎么样:
def verbose_name(self, camelcase)
return re.sub(r'([a-z])([A-Z])',r'\1 \2', camelcase).lower()