Я пытаюсь извлечь идентификатор и данные из следующей строки примера. Я определил id как что-то, что будет иметь алфавиты и несколько других символов, но исключая запятую. Я ожидал, что пиперация не будет забирать цифру 1 данных как часть идентификатора, потому что данные являются смежным блоком, который включает запятую и запятую, исключен из идентификатора. Должно ли pyparsing не отклонять часть данных в целом как id, потому что этот непрерывный блок данных содержит другие символы, не определенные в id? Мои ожидания, что правила применяются к словам в целом и не кусками словpyparsing определение слова как непрерывный блок символов
joinTokensViaSpace = lambda tokens: " ".join(" ".join(t.split()) for t in tokens)
parser= OneOrMore(Word(alphanums+'-/.'))('id').setParseAction(joinTokensViaSpace) + Word(nums+',.()')('data')
parser.parseString(' XXX Y/123 1,234.567890')
выход я получаю
([ 'XXX Y/1231',», 234,567890' ], { 'данные': [('234,567890' , 1)], 'ID': [('XXX Y/1231', 0)]})
выход я ожидал ([' XXX Y/123 ',' 1,234.567890 '], {' data ': [(' 1,234.567890 ', 1)],' id ': [(' XXX Y/123 ', 0)]})
Параметр 'stopOn' ключевое слово аргумент будет включен в следующий выпуск Pyparsing, версия 2.1.0. – PaulMcG