这是我在示例代码中查找文本文件中所有行中的特定单词“dut_decoded”,并逐行替换为另一个文本文件(逐行新名称) 进口重新 new_words = []
rep_file = open('Rename_Changes_Details.txt','r')
for line in rep_file:
line = line.strip()
new_words.append(line)
infile = open('Filter_Lines.txt','r')
i = 0
out = open('ip_list.txt','w')
for inlines in infile:
inlines = re.sub('dut_decoded',new_words[i],inlines)
out.write(inlines)
i += 1
out.close()
infile.close()
但是,我需要用新名称替换所有行中“out =”这个词附近的单词。 例如,我有一个带有这些行的文本文件
1 .-- bass_cut_off = 45 - OUT = sys_alg_oar_bass_extraction_BE45_SR32k0_IN8B0O_SP8F0H.wav
2 .-- bass_cut_off = 0 --out = sys_alg_oar_all_beds_IN10B0O_SP10F2H.wav
3 .-- bass_cut_off = 8 - OUT = sys_alg_oar_bass_extraction_BE80_SR44k1_IN8B0O_SP8F0H.wav
这里我需要在第一行中替换“out =”附近的一个单词(sys_alg_oar_bass_extraction_BE45_SR32k0_IN8B0O_SP8F0H.wav)。就像这个过程需要在所有行中替换一样。新名称来自我的代码中的“infile”。 这个“infile”有以下这些行。
100
101
103
1 .-- bass_cut_off = 45 - 出= 100
2 .-- bass_cut_off = 0 --out = 101
3 .-- bass_cut_off = 8 - 出= 102
请你指导我。
答案 0 :(得分:1)
正则表达式库具有替换匹配部分re.sub( pattern, repl, string )
的功能使用前瞻(?=...)
和lookbehinds(?< = ...)
re.sub( "(?<=--out=)(.+)(?=\s)", "something", "--bass_cut_off=0 --out=sys_alg_oar_all_beds_IN10B0O_SP10F2H.wav" )
导致
'--bass_cut_off=0 --out=something'
在这个例子中,我也可以使用否定前瞻(?!...)
。同样,您可以使用模式"(?<=--out=)(\w+)"
,它会匹配到单词结尾,从而留下".wav"
后缀
'--bass_cut_off=0 --out=something.wav'
在此示例中等效于"(?<=--out=)(.+)(?=.wav)"