pyparsing - 保持解析结果的多个匹配
问题描述
如果在搜索中遗漏了这一点,我们深表歉意。
我有一个案例,我试图获取有关 Verilog 网表的一些信息。我需要的信息很简单,假设我需要知道文件中所有模块的名称。(我最终想要更多,但这个例子就足够了)
我为测试和语法定义了以下字符串
mystr = """
module MyModule(
input somein,
output someout
);
//this is a comment
endmodule
module MyModule2(
input somein2,
output someout2
);
//this is another comment
endmodule
"""
module_name = Word(alphanums+'_').setResultsName('module_name')
base_module = (Keyword("module") + module_name + lpar + SkipTo(rpar) + \
SkipTo(Keyword("endmodule"), include=True)).setResultsName('base_module')
verilog = ZeroOrMore(base_module).setResultsName('modules')
results = verilog.parseString(mystr)
print(results)
print("\n===============\n")
print(results.dump())
print("\n-------\n")
print(results.base_module.dump())
print("\n-------\n")
print(results.base_module.module_name)
运行此程序时,我得到以下信息:
['module', 'MyModule', '(', 'input somein,\n output someout\n', ');\n//this is a comment\n', 'endmodule', 'module', 'MyModule2', '(', 'input somein2,\n output someout2\n', ');\n//this is another comment\n', 'endmodule']
===============
['module', 'MyModule', '(', 'input somein,\n output someout\n', ');\n//this is a comment\n', 'endmodule', 'module', 'MyModule2', '(', 'input somein2,\n output someout2\n', ');\n//this is another comment\n', 'endmodule']
- base_module: ['module', 'MyModule2', '(', 'input somein2,\n output someout2\n', ');\n//this is another comment\n', 'endmodule']
- module_name: 'MyModule2'
- modules: ['module', 'MyModule', '(', 'input somein,\n output someout\n', ');\n//this is a comment\n', 'endmodule', 'module', 'MyModule2', '(', 'input somein2,\n output someout2\n', ');\n//this is another comment\n', 'endmodule']
-------
['module', 'MyModule2', '(', 'input somein2,\n output someout2\n', ');\n//this is another comment\n', 'endmodule']
-------
如果您看到,似乎只有一个module_name
和的实例base_module
。但是,我可以设置listAllMatches=True
这会导致module_name
两者兼有。理想情况下,我希望能够使用以下内容来分析解析结果:
modules
[0]
base_module : [<base module string>]
module_name : '<name>'
[1]
base_module : [<base module string>]
module_name : '<name>'
我相信当您匹配同一表达式的多个实例时,我缺少有关如何存储 ParseREsults 的一些基本知识。我过去在许多项目中都使用过 PyParsing,但我通常会进行行搜索,并且没有匹配同一表达式的多个实例。谢谢您的帮助。
解决方案
推荐阅读
- php - 向 eloquent 资源添加过滤器以有条件地附加关系
- project-server - 如何在 Project Server SOAP API 中进行身份验证?
- video - MP4结构——ISO和QuickTime的理解
- c - 为什么每次调整终端大小时函数 tgetnum("co") 都不会更新?
- c# - 我需要编写一个程序来生成大小写单词密码的所有可能组合
- arrays - 尝试使用选择选项和 ngFor 将对象推送到数组
- swift - 如何在 Swift 中将 NSSet 转换为数据
- java - 如何在社交媒体平台上发布工作?
- c - fgetc 将错误的字符打印到控制台
- javascript - 使动画关键帧无限重复