【发布时间】:2018-12-19 06:09:58
【问题描述】:
所以我有一个 3000 行的大文件。我需要找到 $SETGLOBAL 的第一次出现,并且我需要在这个词第一次出现之后更改这个词。为此,我使用以下正则表达式
with open("textfile.txt","r") as F:
FF=F.read()
FF=re.sub("\$SETGLOBAL\s(.*)", FF ,"CCCC",1)
F2 = open("textfile.txt","w").write(FF)
问题是,为了更改我的大文件中的文本,我还需要正则表达式来捕获此事件之前和之后的所有内容。这样我就可以编写新的文本文件,其中包含已更改的单词。
我该怎么做?
我的问题是我需要变量 FF 中的整个文件。所以我可以将它写入一个新文件。
假设我有以下文件:
123456
$SETGLOBAL AAAA
BBBBBB
$SETGLOBAL TTTT
我需要一个新文件如下
123456
$SETGLOBAL CCCC
BBBBBB
$SETGLOBAL TTTT
但我的解决方案会覆盖所有内容,我只剩下
$SETGLOBAL CCCC
在我的新文件中
【问题讨论】:
-
你的意思是你只需要
FF=re.sub(r"\$SETGLOBAL\b", text ,aa, 1)?只替换一次? -
除非你在有自己的怪癖的 Notepad++ 中这样做,否则消耗一个单词后的所有文本是没有意义的。请澄清您的意思 问题是,如果第一次出现之前的文本发生更改,那么我需要更改的组因此我的代码将不再工作。一些示例会有所帮助。
-
是的,我只需要更改一次,所以最后的 1 就是这样做的。我编辑我的问题以包含它。我的问题如下:我需要一个新文件,其中包含上一个文件的所有文本和更改后的单词。当我使用 re.sub 执行此操作时,整个文件都会被覆盖,剩下的就是替换的文本。
-
我编辑了问题以表明它不是重复的,并回答您的问题。
-
试试
re.sub(r"(\$SETGLOBAL\s+)\w+", r"\1{}".format(text), aa, 1)
标签: regex python-3.x