У меня есть простой набор данных для анализа с линиями, как следующее:PyParsing: Можно ли глобально подавить все литералы?
R1 (a/30) to R2 (b/30), metric 30
только данные, которые мне нужно от выше выглядит следующим образом:
R1, a, 30, R2, 192.168.0.2, 30, 30
Я могу разобрать все это легко с pyparsing, но я либо заканчиваю кучей литералов в моем выпуске, либо я должен конкретно сказать Literal(thing).suppress()
в моей разборной грамматике, которая становится утомительной.
В идеале, я хотел бы написать грамматику для выше как:
Word(alphanums) + '(' + Word(alphanums) + '/' + Word(nums) + ... etc.
и имеют лексемы, игнорируются. Могу ли я сказать что-нибудь вроде .suppressAllLiterals()
?
Примечания:
- новый для Pyparsing
- Я прочитал документацию и 5 или 6 примеров
- поиск Google
Спасибо!
Здравствуйте @Paul, спасибо за ответ! Я попробовал это - кажется, что он работает для строк, которые используются inline (например, 'pp.Word (...) + 'somestring' + pp.Word (...)', а не для вещей, которые уже (например, если я заменил '' somestring ''на' myLiteral') Это небольшое изменение очень помогло с ясностью грамматики. Еще раз спасибо за то, что нашли время, очень ценим. –
Конечно , вы всегда можете обернуть 'Suppress (myLiteral)' или просто 'myLiteral.suppress()' тоже. – PaulMcG
Вы также можете создать подавленный литерал с помощью 'Suppress (« blah »)', а класс Suppress будет создавать Literal для вы. – PaulMcG