簡體   English   中英

Python-用不同的替換替換字符串中的多重匹配

[英]Python - replace multipe matches in a string with different replacements

我有兩個文本文件,並用第二個文件中的實際匹配項替換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與我的國家/地區列表中的一行匹配?

謝謝你的幫助!

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

您可以為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內部和生成器等沒有更深入的了解,這會顯得不太優雅,但是更容易理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM