Python 用于捕获 Verilog 端口名称的正则表达式

Python regex to catch Verilog port names

我在 verilog 文本文件中有一些输出端口语句,如下所示,我只想捕获端口名称。

示例样本:

output Y;
output Y1,Y2,Y3;
output Z;
output Q, QN;

我想要的预期输出是一个包含输出端口名称的列表

(Y)
(Y1, Y2, Y3)
(Z)
(Q,QN)

我试过下面的代码,但它没有给我我想要的列表。

outputPortListPattern=re.compile(r'^\s*(output)\s+(.*);',flags=re.M)
with open(fileA) as fh_in:
    with open(fileB, "w") as fh_out:
        for line in fh_in:
            match=outputPortListPattern.match(line)
            if match:
                matchlist = match.group(2)
                print("Output port list={}".format(matchlist))

考虑到您的格式 output PORT1, PORT2, ..., PORTN;。您可以使用以下不需要正则表达式的代码:

for line in fh_in:
    ports = line.replace('output ', '')[:-1]
    print(f'({ports})')

显然,您需要使用 with 打开文件。

如果您的输入文件是:

output Y;
output Y1,Y2,Y3;
output Z;
output Q, QN;

您的输出将是:

(Y)
(Y1,Y2,Y3)
(Z)
(Q, QN)

如果是你想要的 list 个端口名,那么:

import re

text = """output Y;
output Y1,Y2,Y3;
output Z;
output Q, QN;"""

[re.split(r',\s*', m.group(1))
    for m in re.finditer(r'^output\s+(([^,;]+)(\s*,([^,;]+))*);$', text, flags=re.M)
]

打印:

[['Y'], ['Y1', 'Y2', 'Y3'], ['Z'], ['Q', 'QN']]