Как распарсить сложную строку?

Есть строка, которую нужно распарсить:

from typing import List
def parse_str(st:str) -> List[str]:
    return # смотри пример

Пример работы функции:

st = 'op:dsafllksaf cl:lsdfjlal;sdf op:laksdjfljsa op: alsdfjl;ksadjf;l cl:asdflkj'
parse_str(st)
>>> ['op:dsafllksaf','cl:lsdfjlal;sdf', 'op:laksdjfljsa',
     'op: alsdfjl;ksadjf;l', 'cl:asdflkj']

Единственное до чего я дошел - это распарсить его используя регулярки re.split('op|cl', st). Но это возвращает не то, что нужно.


Ответы (1 шт):

Автор решения: GrAnd

Рерулярке вполне такое взять под силу.

import re
def parse_str(st):
    return re.findall(r"(.+?:.+?)(?:\s+|$)", st)

Или через тот же re.split():

def parse_str(st):
    return re.split(r"(?<!:)\s+(?!:)", st)
['op:dsafllksaf',
 'cl:lsdfjlal;sdf',
 'op:laksdjfljsa',
 'op: alsdfjl;ksadjf;l',
 'cl:asdflkj']
→ Ссылка