2013-07-25 2 views
0

Данная строка "5mins", я хочу отделить их от [5, 'mins']. Я пробовал делать:Как отделить целое число/float и строку от данной строки?

>>> re.findall(r"\d+|\D+", '5mins') 
['5', 'mins'] 

, который, кажется, делает хорошо, но:

>>> def separate(string): 
... return re.findall(r"\d+|\D+", string) 
... 
>>> print(separate('3hours')) 
['3', 'hours'] 
>>> print(separate('7secs')) 
['7', 'secs'] 
>>> print(separate('now')) 
['now'] 

Проблема этого метода является то я получаю ValueError, если я сделал назначение:

>>> number, unit = separate('now') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 1 value to unpack 

Полностью Я хочу получить список от number и unit. Если числа нет, я должен получить пустую строку, чтобы я мог обработать время.

Кроме того, это хорошо, если number не является строкой, например, выше separate() функция возвращает.

+0

Нет, это все еще строка, даже если она содержит число. –

ответ

7
>>> re.match(r"(\d+)?(\D+)?$", '5mins').groups() 
('5', 'mins') 
>>> re.match(r"(\d+)?(\D+)?$", 'now').groups() 
(None, 'now') 
+0

Работа с регулярным выражением всегда была для меня трудной. Обычно я убегаю из регулярного выражения. Откуда вы это узнали? :) –

+2

Трудный путь. Практика, практика, практика. –

Смежные вопросы