如何在文本文件中搜索行的内容、替换行并另存为新文件?



我有一个包含以下内容的xml文件:

<supported-languages>
<lang><![CDATA[en_US]]></lang>
<lang><![CDATA[es_ES]]></lang>
<lang><![CDATA[de_DE]]></lang>
</supported-languages>
<2ndsupported-languages>
<lang><![CDATA[en_US]]></lang>
<lang><![CDATA[es_ES]]></lang>
<lang><![CDATA[de_DE]]></lang>
</2ndsupported-languages>

我只想删除任何包含de_DE的行,然后保存文件。

到目前为止,我有这个:

import fileinput
import sys
file = "C:\UsersDesktopfile.xml"
searchExp = "de_DE"
replaceExp = ""

def replaceAll(file,searchExp,replaceExp):
for line in fileinput.input(file, inplace=1):
line = line.replace(searchExp,replaceExp)
sys.stdout.write(line)
replaceAll(file,searchExp,replaceExp)

接近,但不是真的。它将搜索"de_DE",但只会将其替换为<null>。结果如下:

<supported-languages>
<lang><![CDATA[en_US]]></lang>
<lang><![CDATA[es_ES]]></lang>
<lang><![CDATA[]]></lang>
</supported-languages>
<2ndsupported-languages>
<lang><![CDATA[en_US]]></lang>
<lang><![CDATA[es_ES]]></lang>
<lang><![CDATA[]]></lang>
</2ndsupported-languages>

我希望我的结果看起来像这样

<supported-languages>
<lang><![CDATA[en_US]]></lang>
<lang><![CDATA[es_ES]]></lang>
</supported-languages>
<2ndsupported-languages>
<lang><![CDATA[en_US]]></lang>
<lang><![CDATA[es_ES]]></lang>
</2ndsupported-languages>

我该怎么做?

我试图import re,然后patternpattern = "^.*de_DE.*$"但这不起作用。

只写不包含子字符串的行searchExp

def replaceAll(file, searchExp):
for line in fileinput.input(file, inplace=1):
if searchExp not in line:
sys.stdout.write(line)

不要浪费时间逐行读取文件。
一次将整个文件读入字符串。
使用下面的正则表达式处理字符串,然后重置
文件句柄并将字符串写入文件。

优点:-
你有千兆字节的内存
- 你可以改变正则表达式以满足将来需要跨行的任何搜索更改,
例如[s*de_DEs*],而无需
修改任何语言代码。
- 如果您决定解析 xml 标签,而不可能
根据行中的任何内容拆分标签内容。
(如果您需要,我可以给你一个正则表达式来完成此操作(


使用这个做一个 re.sub((

.*<![CDATA[de_DE]]>.*(?:r?n)?

https://regex101.com/r/xy0AHj/1

最新更新