Word(printables + '.' + printables)
не делает то, что вы думаете.printables
является строкой, поэтому printables + '.' + printables
оценивается как строка действительно длиной, содержащая все печатные символы, за которыми следует точка, а затем снова все печатные символы.Затем эта строка используется для создания объекта Word
, который будет соответствовать группе символов, разделенных пробелами, в наборе, ну, в общем, всех печатаемых символов (а поскольку «.» Можно печатать, то он уже находится в этом наборе).
Я подозреваю , что вы действительно хотите использовать для анализа действительного числа с необязательным начальным знаком минус что-то вроде
Optional('-') + Word(nums) + '.' + Word(nums)`
Обратите внимание, что добавлениесделано с помощью выражений разбора, а не строк, переданных в Word.Это будет анализировать -1,23 как ['-', '1', '.', '23']
.Чтобы получить все это как одну строку, оберните ее в Combine:
Combine(Optional('-') + Word(nums) + '.' + Word(nums))
Тогда вы получите '-1.23' от использования этого выражения.После этого вам остается преобразовать его в число с плавающей точкой Python с помощью встроенного float()
.
pyparsing_common.real
- это предопределенное выражение анализа с плавающей запятой, которое будет обрабатывать начальные знаки, и преобразовать строку в число с плавающей точкой во время разбора, чтобы при получении значения от анализатора оно уже было преобразовано в число с плавающей точкой.