我有两个文本文件,并使用第二个文件中的实际匹配替换XXX占位符 - 按照第二个文件中给出的顺序。
第一个文本是一行中有多行和多个占位符的文件。
欧盟包括以下国家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 :(得分:0)
在模块.sub(replacement, string[, count=0])
中,count = 1应仅替换第一次出现。
答案 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
这不太优雅,但如果您对Python内部和生成器等没有更深入的经验,则可以更好地理解。