Pyparsing嵌套表达式:在ParseResults中返回嵌套字符
问题描述:
我目前使用pyparsing来标识是否在字符串中使用了嵌套括号,以便识别错误地连接到单词的引用数字。Pyparsing嵌套表达式:在ParseResults中返回嵌套字符
例如,'apple(4)'。
我希望能够识别引用subtoken('(4)')。但是,当我使用searchString时,它返回[[7]]的ParseResults对象,该对象不提供括号。我想在原始标记中查找子字符串,所以我需要在ParseResults对象中包含嵌套字符。也就是说,我想搜索'(4)'。有没有办法让searchString返回嵌套字符。
答
问题:有没有办法让searchString返回嵌套字符。
考虑以下示例:
data = 'apple(4), banana(13), juice(1)'
from pyparsing import Word, nums, alphas
nested = Word(alphas) + '(' + Word(nums) + ')'
for item in data.split((',')):
print(item, "->", nested.searchString(item))
输出:
apple(4), ->[['apple', '(', '4', ')']] banana(13), ->[['banana', '(', '13', ')']] juice(1), ->[['juice', '(', '1', ')']]
import re
nObj = re.compile('(\w+?)(\(\d+\))')
findall = nObj.findall(data)
print('findall:{}'.format(findall))
输出:
findall:[('apple', '(4)'), ('banana', '(13)'), ('juice', '(1)')]
测试使用Python 3.4.2
你能具体谈谈正是这些括号表达式可能看起来像,你需要支持嵌套? 'nestedExpr'是一个快速又脏兮兮的帮手,可以快速跳过嵌套的parens,大括号,括号等,从嵌套中保留结构。如果你只是想要原始子字符串,将'nestedExpr'包装在'originalTextFor'中,它应该包含括号'()'。但是如果你真的想弄懂内容,那么我建议你为它们定义实际的递归表达式。 – PaulMcG