如何多次替换两个分隔符/字符串之间的唯一字符串

Posted

技术标签:

【中文标题】如何多次替换两个分隔符/字符串之间的唯一字符串【英文标题】:How to replace unique string between two separators/strings multiple times 【发布时间】:2018-12-12 00:23:28 【问题描述】:

我正在浏览一个文件夹/目录并读取所有文件,检查是否存在某个标签,然后仅当某个特定字符串位于两个特定字符串/标签之间时才多次替换它。 以下是文本文件的示例:

START $YES
N1 000 001 002
N2 TAG#1 004 008
N3 This is an apple
N4 006 005 003
(( TAG#2 ))
N5 This is an apple

我想要一个可以打开文件的解决方案,检查是 START $YES 还是 START $NO,并将字符串 This is an apple 替换为 There is no appleTAG#1TAG#2 之间,前提是 START $YES 是展示。我希望原始文件不受影响(创建一个新文件或使用fileinput 库创建一个备份)。

目前我无法发布我的 Python 代码,但当我回到办公桌前,我会用我尝试过的代码更新这篇文章。

【问题讨论】:

【参考方案1】:
import shutil

def func(srcname, dstname):
    replace = False
    with open(srcname) as srcfile:
        with open(dstname, 'w+') as dstfile:
            line = srcfile.readline().strip()
            if "START $NO" in line:
                srcfile.seek(0)
                shutil.copyfileobj(srcfile, dstfile)
                return
            while line:
                if "TAG" in line and not replace:
                    replace = True
                if "TAG" in line and replace:
                    replace = False
                if replace and "This is an apple" in line:
                    line = line.replace("This is an apple", "There is no apple")
                dstfile.write(line)
                line = srcfile.readline().strip()

【讨论】:

以上是关于如何多次替换两个分隔符/字符串之间的唯一字符串的主要内容,如果未能解决你的问题,请参考以下文章

用子字符串替换后续分隔符之间的字符串

如何在javascript中的两个分隔符之间拆分字符串?

如何在两个分隔符之间提取字符串[重复]

正则表达式删除两个字符串之间的连字符

notepad++如何替换两个字符之间的内容?内容跨行

Oracle 正则表达式替换用逗号包围的字符串的多次出现