Я согласен с комментаторами, что использование лексической библиотеки, такой как ply
, - самый простой или лучший способ.Если вы все еще хотите / обязаны сделать это самостоятельно, есть пара вещей, которые нужно изменить.
Если вы видите что-то вроде 132
, вам нужно перейти к номеру дляследующая итерация цикла, поэтому for x in numbersArray:
не работает.Вы можете просто выполнить while True
, отследить индекс цикла вручную и завершить работу, когда закончите.
Самый мощный способ сопоставить ваш ввод с лексемой - это регулярные выражения ,Например, вы можете сопоставить числа с необязательной десятичной частью, используя что-то вроде
import re
...
re.match(r'\d+(\.\d*)?', numbersArray[current_index:])
(Большинство спецификаций чисел более «интересны», чем это, поэтому определенно не копируйте мое регулярное выражение.быть неправым в том, что вам нужно.)
Вы можете использовать regex101.com для экспериментов и построения своего регулярного выражения.
Вы также можете использовать встроенный в Python строковые методы , такие как isnumeric
и isalpha
.При этом ваша проверка номера может выглядеть как
lexeme = ''
while numbersArray[current_index].isdigit():
lexeme += numbersArray[current_index]
current_index += 1