关于Word和CaselessKeyword的pyparsing

时间:2014-10-23 02:14:23

标签: python pyparsing

我是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,但事实证明第二场比赛失败了,为什么?

1 个答案:

答案 0 :(得分:3)

  • WordToken,用于匹配由allowed组成的单词 字符集。
  • KeywordToken,必须完全匹配指定的 字符串后面紧跟一个非关键字字符。所以 Keyword(alphas, alphanums + "_")必须与字符串完全匹配 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"并且是 其次是不在的东西 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"

  • 除了匹配项外,CaselessKeywordKeyword相同 不区分大小写的。

由于Word(alphas, alphanums + "_")包含大写和小写字符,

alphas已经无条件匹配。