【发布时间】:2014-03-09 22:30:05
【问题描述】:
下面是我的玩具解析器:
from pyparsing import Word,OneOrMore,alphanums,nums
number=Word(nums)
word=OneOrMore(Word(alphanums))
greeting = word+(number)
tests = "Hello3 World 1234"
print tests, "->", greeting.parseString(tests)
我期望得到的结果是
['Hello3','World','1234']
但我得到了错误:
ParseException: Expected W:(0123...) (at char 17), (line:1, col:18)
'1234'字符串不应该先被'number'规则匹配,然后被'word'规则忽略吗?
我怀疑现在是深夜,我错过了文档中一些非常基本的东西,但我已经浏览了 'pyparsing 入门' O'Reilly pdf 两次,但找不到解决方案。 感谢您的帮助。
【问题讨论】:
-
否 - '1234' 字符串将与 OneOrMore 类中内置的重复匹配,您已将其定义为接受一个或多个由字母数字字符组成的单词,与 '1234' 匹配。如果想让 word 不接受数字,则将 word 重新定义为
OneOrMore(~number+Word(alphanums)),这样由所有数字组成的词都将包含在 word 部分中,以便后面的数字部分有匹配的机会。
标签: python tokenize pyparsing rule operator-precedence