То, что я пытался достичь, было что-то вроде этого:
>>> 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 возвращает пустой список. Я не знаю, как обстоят дела с сообществом питонов в этом вопросе, поэтому я говорю: я в порядке с любым из них. А поскольку решение 200_success проще, я принял его как правильный ответ.