2013-03-08 64 views
1

我有匹配由空格分隔號碼的簡單pyparsing語法:pyparsing:如何獲取令牌位置?

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

鑑於1 2 34測試字符串返回3個字符串被解析令牌。但是,如何找到每個標記在原始字符串中的位置?我需要它來進行「種類」語法突出顯示。

回答

2

添加此解析動作號:

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')]