以下是我的玩具解析器:
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”字符串不应与“数字”规则匹配,因此“字”规则会忽略该字符串吗?
我怀疑是深夜,我在文档中遗漏了一些完全基本的内容,但是我已经两次查看了“开始使用pyparsing”O'Reilly pdf,但找不到解决方案。 谢谢你的帮助。
答案 0 :(得分:1)
这与您的“1234”与word
规则相匹配,因为您说它可能是字母或数字。 word
规则会继续捕获包含“1234”的字词,因此错误是number
规则永远不会被命中。
如果你对word
的规则更接近python的标识符定义(不能以数字开头),这将修复你的解析器:
from pyparsing import Word, OneOrMore, alphas, alphanums, nums
number=Word(nums)
word=OneOrMore(Word(initChars=alphas, bodyChars=alphanums))
greeting = word+(number)
tests = "Hello3 World 1234"
print tests, "->", greeting.parseString(tests)