我是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
字符集。Keyword
是Token
,它必须与指定的完全匹配
字符串,然后紧跟一个非关键字字符。所以Keyword(alphas, alphanums + "_")
必须与字符串完全匹配"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
并成为
其次是不在"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_"
。CaselessKeyword
与Keyword
相同,除了匹配项为
不区分大小写。
由于Word(alphas, alphanums + "_")
包含大写和小写字符,因此alphas
已经不区分大小写。