替换文件中的行的代码是重复行

2024-05-23 20:05:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图替换文件中的几行。这是我的示例文件:

input a1;
//Power_off assertion for all power ports (1 per each power domain)
// `assert_Check1
//Start of functional specification here
// always @* reg_z4=Check

下面是我为替换行而编写的python代码:

import re,sys,fileinput

for line in fileinput.input(sys.argv[1], inplace=True):
    assertPattern=re.match(r'\/\/\s(`assert_.+\)$)',line, re.M)
    alwaysPattern=re.match(r'^\/\/\s(always\s@\*.+\;$)',line, re.M)
    print (line.rstrip().replace('//Power_off assertion for all power ports (1 per each power domain)', '`ifdef assert_stdcell\n\n//Power_off assertion for all power ports (1 per each power domain)'),)
    if assertPattern:
        print (line.rstrip().replace(assertPattern.group(),assertPattern.group(1)))
    print (line.rstrip().replace('//Start of functional specification here','`endif\n\n//Start of functional specification here'),)
    if alwaysPattern:
        print (line.rstrip().replace(alwaysPattern.group(),alwaysPattern.group(1)),)

这段代码做了一些替换。但是,代码会复制文件中的所有行。进一步的alwaysPattern和assertPattern替换不起作用。下面是代码的输出:

input a1;
input a1;
`ifdef assert_stdcell

//Power_off assertion for all power ports (1 per each power domain)
//Power_off assertion for all power ports (1 per each power domain)
// `assert_Check1
// `assert_Check1
//Start of functional specification here
`endif

//Start of functional specification here
// always @* reg_z4=Check
// always @* reg_z4=Check

你知道为什么会发生这种复制吗?为什么图案替换不起作用


Tags: offordomainlineassertportsallstart
1条回答
网友
1楼 · 发布于 2024-05-23 20:05:21

重复发生是因为你必须在ifs之外打印语句。所以你总是要打印两次行,另外如果你的任何一个regex匹配(他们不匹配),你会再次打印行

相关问题 更多 >