2015-06-02 3 views
2

Я пытаюсь обозначить ряд строк, используя заглавную букву в виде разделителя. Я приземлился на следующий код:Разбиение на группу заглавных букв в python

token = ([a for a in re.split(r'([A-Z][a-z]*)', "ABCowDog") if a]) 

print token 

И я получаю это, как и следовало ожидать, в ответ:

[ 'A', 'B', 'корова', 'Dog']

Теперь это всего лишь примерная строка, облегчающая жизнь, но в моем случае я хочу пройти этот список и найти отдельные символы (достаточно просто с проверкой len()) и поместить отдельные буквы вместе, при условии они соответствуют предыдущему определению. В приведенном выше примере строки «AB», «Cow» и «Dog» представляют собой строки, которые я на самом деле хочу сформировать (последовательные капиталы являются частью аббревиатуры). По какой-то причине, когда у меня есть свой токен, я не могу понять, как ходить по списку. Извините, если это простой ответ, но я довольно новичок в python и устал стучать головой о стену.

ответ

0
([A-Z][a-z]+) 

Вы должны расколоться на это.

1

Вы можете использовать следующие разделить с regex module:

(?=[A-Z][a-z]) 

См DEMO

Код:

regex.split(r'(?=[A-Z][a-z])', "ABCowDog",flags=regex.VERSION1) 
+0

're.split' не расщепляется на' 0 ширина assertions'.Use 'regex' модуль вместо – vks

2

re.split не всегда проста в использовании и, кажется, иногда ограничен во многих ситуации. Вы можете попробовать другой подход с re.findall:

>>> s = 'ABCowDog' 
>>> re.findall(r'[A-Z](?:[A-Z]*(?![a-z])|[a-z]*)', s) 
['AB', 'Cow', 'Dog'] 
Смежные вопросы