我是pyparsing的新手,我试图用它来解析DSL定义的文档。但是,当我从OReilly读到这本书时,我得到了一个关于Word使用的问题。
from pyparsing import *
identifier = Word(alphas, alphanums + "_")
r1 = identifier.parseString("a____3")
print r1
(here pass)
identifier2 = CaselessKeyword(alphas, alphanums + "_")
r2 = identifier2.parseString("a____3")
print r2
(失败,pyparsing.ParseException:预期“abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”(在char 0处),(line:1,col:1)) 我的问题:
Word和CaselessKeyword之间的区别,我读过API说the API,但事实证明第二场比赛失败了,为什么?
答案 0 :(得分:3)
Word
是Token
,用于匹配由allowed组成的单词
字符集。 Keyword
是Token
,必须完全匹配指定的
字符串和后面紧跟一个非关键字字符。所以
Keyword(alphas, alphanums + "_")
必须与字符串完全匹配
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
并且是
其次是不在的东西
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
。
除了匹配项外,CaselessKeyword
与Keyword
相同
不区分大小写的。
Word(alphas, alphanums + "_")
包含大写和小写字符, alphas
已经无条件匹配。