使用 Python 将系统验证日志打包数组转换为解压缩数组语法



我正在尝试使用 python 正则表达式将文本文件中的以下打包数组行转换为解压缩的数组行:

以下是文件内容:

inout [5:0]  IO_PMU_LED;
input [7:0]  PMU_DI_SCAN_IN_VCORE;
inout   [31:0]   PMU_DI_RIF_WR_DATA_VLP ;
output  [9:0]  PMU_DI_RIF_ADDR_VLP;
input [5:0]  PMU_DI_LED_PAD_DRIVE_VALUE_VLP;
output   [5:0]  PMU_DI_LED_PAD_DRIVE_ENABLE_VLP;

以下是所需的输出:

inout IO_PMU_LED [5:0];
input PMU_DI_SCAN_IN_VCORE [7:0];
inout PMU_DI_RIF_WR_DATA_VLP [31:0];
output PMU_DI_RIF_ADDR_VLP [9:0];
input PMU_DI_LED_PAD_DRIVE_VALUE_VLP [5:0];
output PMU_DI_LED_PAD_DRIVE_ENABLE_VLP [5:0];

这是我尝试过的代码,它与文件内的任何模式都不匹配:

with open ('input.txt', 'r' ) as f:
print("Opening file:{}".format(f.name))
content = f.read()
content_new = re.sub('^s*(input|output|inout)s+([[d:d]])s+(w+)s*;', r'1 3 2;', content, flags = re.M)
print("Finished replacing content")

有什么建议吗?

我设法清理了您正在使用的正则表达式:

content_new = re.sub('^s*(input|output|inout)s+([d+:d+])s+(w+)s*;', ...)

第二个捕获组的内容周围有一组额外的括号,该组仅与集中的单个字符匹配。您也没有在 range 语句中处理超过一个数字,这意味着未捕获[31:0]声明。

编辑:
我强烈推荐这个在线正则表达式测试器。它解析您输入的任何正则表达式,并准确告诉您它将如何评估。

最新更新