Python re.sub附加字符串而不是替换它

时间:2012-11-21 00:23:26

标签: python regex

我是Python的新手,我坚持使用正则表达式替换。我正在解析一个设置文件,其中包含以下语句:

set fmri(convolve7) 3

设置文件用作模板。脚本解析模板并使用更新的设置写入新的设置文件。

我的程序的主要结构是

for line in infile:
 if condition = true
  for each in listofelements
    if re.search(each, line):
     print(re.sub(r"\d+", "0", line), file=outfile, end='') # double output
 if re.search(somethingelse, line):
  print(re.sub(templatesubid, i, line), file=outfile, end='')# normal substitution

等。

for循环中的替换导致双输出,而在for循环之外它不会。 for循环似乎插入带有正确替换字符串的换行符,即

set fmri(convolve7) 0
set fmri(convolve7) 3

其他变量按预期工作,而代码相同。可能是for循环导致这个双输出吗?

1 个答案:

答案 0 :(得分:1)

看起来相关的代码位于底部:

    for line in infile:
        if len(subparamlist) > 0:
            for j in subparamlist:
                query = j.replace(")", "\)").replace("(", "\(")
                if re.search(query, line):
                    print(re.sub(r"\d+", "0", line), file=outfile, end='') #trouble!
        if re.search(templatesubid, line) and re.search('feat_files\(', line) or re.search('\(custom', line) : # correct the subjectID
            print(re.sub(templatesubid, i, line), file=outfile, end='')
        elif re.search(str(nptslist[2]), line): # correct the number of timepoints
            print(re.sub(str(nptslist[2]), str(nvols[0]), line), file = outfile, end='')
        else: 
            print(line, file=outfile, end='') # if nothing to do, just copy the line to the new text file.

我认为问题在于您在顶级if语句中打印(将0替换为该行),然后再次在{{1}的一个分支中打印挡在它下面。这个结果是一些(或所有)行加倍。

我实际上并没有很好地理解代码以找出合适的解决方案,但可能的开始可能是将您已评论的if/elif/else更改为“更正主题ID”{{1} }。