Для этой задачи я бы определенно использовал регулярное выражение:
import re
there = re.compile(r'\s*(\d+)\s*(\S+)')
thematch = there.match(s)
if thematch:
number, unit = thematch.groups()
else:
raise ValueError('String %r not in the expected format' % s)
В шаблоне RE \s
означает «пробел», \d
означает «цифра», \S
означает незаполнение; *
означает «0 или более из предшествующего», +
означает «1 или более из предшествующего», а скобки заключают в себе «группы захвата», которые затем возвращаются вызовом groups()
объекта match. ( thematch
- Нет, если данная строка не соответствует шаблону: необязательный пробел, затем одна или несколько цифр, затем необязательный пробел, затем один или несколько непробельных символов).