我尝试使用python regex将文本文件中的下面打包的数组行转换为解压缩的数组:
以下是文件内容:
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")
有什么建议吗?
答案 0 :(得分:0)
我设法清理你正在使用的正则表达式:
content_new = re.sub('^\s*(input|output|inout)\s+(\[\d+:\d+\])\s+(\w+)\s*;', ...)
第二个捕获组的内容周围有一组额外的括号,它只匹配集合中的单个字符。您还没有在范围语句中处理多个数字,这意味着未捕获[31:0]
声明。
编辑:
我强烈推荐this online regex tester。它解析您输入的任何正则表达式,并准确地告诉您如何评估它。