当前位置: 首页 > 知识库问答 >
问题:

Python-用不同的替换替换字符串中的Multipe匹配

殷轶
2023-03-14

我有两个文本文件,并用第二个文件中的实际匹配项替换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

我的问题是正则html" target="_blank">表达式替换不仅对第一次出现/匹配有效,而且对整个第一行都有效。现在我的输出是这样的:

欧盟由以下国家组成波兰、波兰、波兰、波兰、...欧盟最大的三个国家是荷兰、荷兰、荷兰。

如何将XXX的每一次出现与我的国家/地区列表中的一行匹配?

感谢任何帮助!

共有2个答案

澹台鸿光
2023-03-14

您可以为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内部和生成器等没有更深的经验,那就更好理解了。

贲宜春
2023-03-14

在re模块. sub(替换,字符串[,计数=0])计数=1应该只替换第一次出现。

 类似资料:
  • 问题内容: 我有一个以字符串形式传递的句子,我正在对单词“ and”进行替换,我想用“”替换它。而且它不是用空格替换“和”一词。以下是我的逻辑示例。而当我调试此逻辑时,逻辑确实落入了句子。 这里有我想念的东西吗? 问题答案: 而当我调试此逻辑时,逻辑确实落入了句子。 是的,然后你放弃返回值。 Java中的字符串是不可变的-当你调用时,它不会更改现有字符串的内容-它会返回经过修改的新字符串。所以你要

  • 我有一个作为字符串传入的句子,我正在对单词“and”进行替换,我想用“”替换它。它并没有用空白代替“和”。下面是我的逻辑示例。当我调试这个的时候,逻辑就落在句子里了。代替 这里有我遗漏的东西吗。

  • 问题内容: 我需要替换字符串中的多个字符。结果不能包含任何“&”或任何逗号。 我目前有: 但是,如何输入多个值? 非常感谢! 问题答案: 您只需要菊花链式连接它们:

  • 问题内容: 说我有一个看起来像这样的字符串: 您会注意到字符串中有很多与符号的位置,后跟一个字符(例如“&y”和“&c”)。我需要用字典中的适当值替换这些字符,如下所示: 最快的方法是什么?我可以手动找到所有“&”号,然后遍历字典以更改它们,但这似乎很慢。进行一堆正则表达式替换似乎也很慢(我的实际代码中将有大约30-40对字典)。 任何建议表示赞赏,谢谢。 编辑: 正如在该问题的注释中所指出的那样

  • 问题内容: 有没有更短的方法可以编写以下代码? 注意,我不需要替换那些确切的值。我只是在寻找一种将5条以上的线变成少于5条线的方法 问题答案: 看起来是使用循环的好机会: 如果您不介意括号,则更快的方法是:

  • 问题内容: 这个简单的代码仅尝试用冒号替换分号(在i指定的位置)不起作用: 它给出了错误 如何解决此问题,以冒号代替分号?使用replace不起作用,因为该函数不占用索引-可能有一些我不想替换的分号。 例 在字符串中,我可能有许多分号,例如 我知道我想替换哪些(我在字符串中有索引)。使用替换无法正常工作,因为我无法对其使用索引。 问题答案: python中的字符串是不可变的,因此你不能将它们视为列