pyparsing:如何获得令牌位置?

时间:2013-03-08 13:59:15

标签: python pyparsing

我有一个简单的pyparsing语法,它匹配用空格分隔的数字:

from pyparsing import *
NUMBER = Word( nums )
STATEMENT = ZeroOrMore( NUMBER )
print( STATEMENT.parseString( "1 2 34" ) )

给定1 2 34测试字符串,它返回3个解析为令牌的字符串。但是如何在原始字符串中找到每个标记的位置?我需要它用于“类型”语法高亮。

1 个答案:

答案 0 :(得分:3)

将此解析操作添加到NUMBER:

NUMBER.setParseAction(lambda locn,tokens: (locn,tokens[0]))

解析操作可以传递为给定表达式解析的标记,解析的位置和原始字符串。您可以使用以下任何签名将函数传递给setParseAction

fn()
fn(tokens)
fn(locn,tokens)
fn(srctring,locn,tokens)

根据您的需要,您所需要的只是位置和解析的令牌。

添加此解析操作后,您的解析结果现在如下所示:

[(0, '1'), (2, '2'), (4, '34')]