我有一个简单的pyparsing
语法,它匹配用空格分隔的数字:
from pyparsing import *
NUMBER = Word( nums )
STATEMENT = ZeroOrMore( NUMBER )
print( STATEMENT.parseString( "1 2 34" ) )
给定1 2 34
测试字符串,它返回3个解析为令牌的字符串。但是如何在原始字符串中找到每个标记的位置?我需要它用于“类型”语法高亮。
答案 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')]