Использование PyParsing
Ответ @Abhijit хорош, и для этой простой проблемы reg-ex может быть подходящим вариантом. Однако при работе с проблемами анализа вам часто требуется более расширяемое решение, которое может расти вместе с вашей проблемой . Я обнаружил, что pyparsing
отлично подходит для этого, вы пишете грамматику она выполняет анализ:
from pyparsing import *
index = Combine(Word(alphas))
# Define what a number is and convert it to a float
number = Combine(Word(nums)+Optional('.'+Optional(Word(nums))))
number.setParseAction(lambda x: float(x[0]))
# What do extra numbers look like?
marker = Word('/').suppress()
extra_numbers = marker + number
# Define what a possible line could be
line_code = Group(index + number + ZeroOrMore(extra_numbers))
grammar = OneOrMore(line_code)
Из этого определения мы можем разобрать строку:
S = '''ABC1.12
ABC 1.22
XXX1.12/13/77/32.
XYZ 1.12 / 1.13
'''
print grammar.parseString(S)
Предоставление:
[['ABC', 1.12], ['ABC', 1.22], ['XXX', 1.12, 13.0, 77.0, 32.0], ['XYZ', 1.12, 1.13]]
Преимущества:
Число теперь в правильном формате, так как мы набрали их как плавающие во время синтаксического анализа . Обрабатывается еще много «чисел», посмотрите на индекс «XXX», все числа типа 1.12, 13, 32 разбираются независимо от десятичного числа.