我想要达到的是这样的效果:
>>> camel_case_split("CamelCaseXYZ")
['Camel', 'Case', 'XYZ']
>>> camel_case_split("XYZCamelCase")
['XYZ', 'Camel', 'Case']
于是我搜索了一下,发现了这个 完全正则表达式完全正则表达式:
(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])
作为下一个合乎逻辑的步骤,我尝试了:
>>> re.split("(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])", "CamelCaseXYZ")
['CamelCaseXYZ']
为什么这不工作,以及我如何实现的结果从链接的问题在 python?
编辑: 解决方案摘要
我用一些测试用例测试了所有提供的解决方案:
string: ''
AplusKminus: ['']
casimir_et_hippolyte: []
two_hundred_success: []
kalefranz: string index out of range # with modification: either [] or ['']
string: ' '
AplusKminus: [' ']
casimir_et_hippolyte: []
two_hundred_success: [' ']
kalefranz: [' ']
string: 'lower'
all algorithms: ['lower']
string: 'UPPER'
all algorithms: ['UPPER']
string: 'Initial'
all algorithms: ['Initial']
string: 'dromedaryCase'
AplusKminus: ['dromedary', 'Case']
casimir_et_hippolyte: ['dromedary', 'Case']
two_hundred_success: ['dromedary', 'Case']
kalefranz: ['Dromedary', 'Case'] # with modification: ['dromedary', 'Case']
string: 'CamelCase'
all algorithms: ['Camel', 'Case']
string: 'ABCWordDEF'
AplusKminus: ['ABC', 'Word', 'DEF']
casimir_et_hippolyte: ['ABC', 'Word', 'DEF']
two_hundred_success: ['ABC', 'Word', 'DEF']
kalefranz: ['ABCWord', 'DEF']
总而言之,你可以说@kalefranz 的解与问题不匹配(见最后一个例子) ,而@casimir et hippolyte 的解吃掉了一个空间,因此违反了分裂不应该改变单个部分的观点。其余两个备选方案之间的唯一区别是,我的解决方案在空字符串输入上返回一个包含空字符串的列表,而@200 _ Success 的解决方案返回一个空列表。 我不知道 Python 社区在这个问题上的立场如何,所以我说: 我对任何一个都没有意见。因为200 _ Success 的解决方案更简单,所以我认为它是正确的答案。