Отдельное число от единицы в строке в Python - PullRequest
6 голосов
/ 10 февраля 2010

У меня есть строки, содержащие числа с их единицами, например, 2 ГБ, 17 футов и т. Д. Я хотел бы отделить число от единицы и создать 2 разные строки. Иногда между ними есть пробел (например, 2 ГБ), и это легко сделать с помощью split ('').

Когда они вместе (например, 2 ГБ), я проверял бы каждый символ, пока не найду букву вместо числа.

s='17GB'
number=''
unit=''
for c in s:
    if c.isdigit():
        number+=c
    else:
        unit+=c

Есть ли лучший способ сделать это?

Спасибо

Ответы [ 12 ]

0 голосов
/ 11 февраля 2010

Для этой задачи я бы определенно использовал регулярное выражение:

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 - Нет, если данная строка не соответствует шаблону: необязательный пробел, затем одна или несколько цифр, затем необязательный пробел, затем один или несколько непробельных символов).

0 голосов
/ 11 февраля 2010

Как насчет использования регулярного выражения

http://python.org/doc/1.6/lib/module-regsub.html

...