2014-02-13 30 views
0

我有兩個文本文件,並用第二個文件中的實際匹配替換了XXX佔位符 - 按第二個文件中給出的順序。Python - 用不同的替換替換字符串中的multipe匹配

第一個文本是一行中包含多行和多個佔位符的文件。

歐盟由以下國家組成:XXX,XXX,XXX,XXX,XXX,... 歐盟內的三大國家是XXX,XXX,XXX。

第二個文件是每行一個匹配的列表:

波蘭 荷蘭 丹麥 西班牙 意大利 德國 法國

我想擁有它取代如下:

歐盟由下列國家組成:波蘭,荷蘭,丹麥,西班牙,意大利...... 歐盟內部三大國家斯洛登聯盟是德國,法國,XXX。

到目前爲止,我有這個編碼:

import re 
file1 = open("text.txt") 

file2 = open("countries.txt") 
output = open("output.txt", "w") 
countrylist = [] 

i=0 
for line in file2: 
    countrylist[i:] = verweise 
    i=i+1 

j=0 
for line in file1: 
    if "XXX" in line: 
     line = re.sub("XXX", countrylist[j], line) 
     j=j+1 
    output.write(line) 
    output.flush() 
output.close 

我的問題是,正則表達式更換不僅適用於第一次出現/比賽,但整個第一線。所以我現在的輸出結果如下:

歐盟由以下州組成:波蘭,波蘭,波蘭,波蘭,波蘭...... 歐盟範圍內的三個最大的國家是荷蘭,荷蘭,荷蘭。

如何將XXX的每一次出現與我的國家/地區列表中的一行匹配?

感謝您的幫助!

回答

0

在re模塊.sub(replacement, string[, count=0]) count = 1應該只替換第一次出現。

0

您可以撥打爲每一個功能匹配sub認定:

countries = [ 'Poland', 'Netherlands', 'Denmark', 'Spain', 'Italy' ] 

def f(match, countriesIter=iter(countries)): 
    return countriesIter.next() 

line = "The European Union consists of the following states XXX, XXX, XXX, XXX, XXX" 

print re.compile('XXX').sub(f, line) 

這將打印:

The European Union consists of the following states Poland, Netherlands, Denmark, Spain, Italy 

取決於你的知識可能是最好使用一個全局計數器來逐步國名列表:

count = 0 
def f(match): 
    global count 
    result = countries[count] 
    count += 1 
    return result 

這是不太優雅b如果你對Python內部和發生器沒有更深入的經驗等等,可以更好地理解它。