2

我写这个来解析我自己的 .dotf 文件:

def parseFromDOTF(file_path):
    comment = "%" + restOfLine
    typeToken = CaselessKeyword("@TYPE")
    attrToken = CaselessKeyword('@ATTRIBUTE')
    ident = Word(alphas,alphanums)
    type = Suppress(typeToken) + ident
    columnList = Group(delimitedList(nums))
    attribute = Group(Suppress(attrToken) + ident("attribute") + columnList("column"))
    DOTF = type('type') + OneOrMore(attribute)("attributes")
    DOTF.ignore(comment)
    return DOTF.parseFile(file_path)

下面是 .dotf 文件的示例

%a comment  
@TYPE NORMAL
@ATTRIBUTE id 0
@ATTRIBUTE values 1,2,3,4
@ATTRIBUTE class 5

但它有问题:

pyparsing.ParseException: Expected "0123456789" (at char 79), (line:3, col:15)

第 3 行的第 15 列是空格,不是吗?

那么,怎么了?

谢谢!

4

1 回答 1

3

nums等于字符串'0123456789'。所以定义

columnList = Group(delimitedList(nums))

告诉 pyparsing acolumnList应该是一个以逗号分隔的字符串列表,每个字符串的字面意思是'0123456789'.

要改为匹配由字符串中的字符组成的以逗号分隔的“单词”列表nums,请使用Word(nums)

integer = Word(nums)
columnList = Group(delimitedList(integer))
于 2011-08-21T13:44:47.410 回答