我是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”(字符为0),(行:1,列:1))
我的问题:

Word和CaselessKeyword之间的区别是,我读了API说的the API,但是事实证明第二次匹配失败了,为什么?

最佳答案

Word是用于匹配由允许的单词组成的单词的Token
字符集。
KeywordToken,它必须与指定的完全匹配
字符串,然后紧跟一个非关键字字符。所以
Keyword(alphas, alphanums + "_")必须与字符串完全匹配
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"并成为
其次是不在
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
CaselessKeywordKeyword相同,除了匹配项为
不区分大小写。


由于Word(alphas, alphanums + "_")包含大写和小写字符,因此alphas已经不区分大小写。

10-07 15:35