Нашим лучшим вариантом здесь, вероятно, является re.findall
, потому что он позволяет использовать lookaheads, а re.split
- нет.Мы можем попробовать разбить на следующий шаблон:
[A-Z]{2,}(?=[A-Z][a-z])|[A-Z][a-z]+|[A-Z]+$
Этот шаблон говорит, что совпадают:
[A-Z]{2,}(?=[A-Z][a-z])
Две или более заглавных буквы, пока не дойдет до верхнего регистра, за которым следует нижний регистр (обозначаяначало следующего верблюжьего слова).
[A-Z][a-z]+
верблюжье слово, заданное заглавными буквами, за которыми следуют одна или несколько строчных букв.
[A-Z]+$
любое количество конечных заглавных букв вправопреемство.
Код:
input = "SFTPServerABC"
results = re.findall(r'[A-Z]{2,}(?=[A-Z][a-z])|[A-Z][a-z]+|[A-Z]+$', input)
print(results)
['SFTP', 'Server', 'ABC']