Python从文档中剥离XML标记

Python从文档中剥离XML标记,python,xml,regex,Python,Xml,Regex,我正在尝试使用Python从文档中剥离XML标记,Python是我的新手语言。这是我第一次尝试使用regex,这真的是一个最好的想法的希望 mfile = file("somefile.xml","w") for line in mfile: re.sub('<./>',"",line) #trying to match elements between < and /> mfile=file(“somefile.xml”、“w”) 对于mfile中的行: r

我正在尝试使用Python从文档中剥离XML标记,Python是我的新手语言。这是我第一次尝试使用regex,这真的是一个最好的想法的希望

mfile = file("somefile.xml","w")

for line in mfile:
    re.sub('<./>',"",line) #trying to match elements between < and />
mfile=file(“somefile.xml”、“w”)
对于mfile中的行:
re.sub(“”,“,行)#尝试匹配<和>之间的元素
结果惨败。我想知道如何使用正则表达式

其次,我在谷歌上搜索发现:

这似乎有效。但我想知道,有没有一种更简单的方法来去除所有xml标记?也许用ElementTree

请注意,通常用正则表达式来做是不正常的。看

试试这个:

import re

text = re.sub('<[^<]+>', "", open("/path/to/file").read())
with open("/path/to/file", "w") as f:
    f.write(text)
重新导入

text=re.sub(“最可靠的方法可能是使用


它将避免使用正则表达式“解析”XML的问题,并应正确处理转义和所有问题。

无需lxml外部库即可替代Jeremiah的答案:

import xml.etree.ElementTree as ET
...
tree = ET.fromstring(Text)
notags = ET.tostring(tree, encoding='utf8', method='text')
print(notags)

应该使用任何Python>=2.5

@JJG:请注意,在for循环之后,您仍然需要一些东西(这不会更改其上的文件)own@DavidRobinson谢谢我意识到现在我不确定我是否理解那里的正则表达式。它似乎匹配开始<,然后不匹配另一个<,然后匹配最后的>@JJG,1.char”“(
\>
)问题是正则表达式总是返回最多的子序列。因此,我们必须确保“”之间不会有任何其他标记。使用选项
“w”
打开文件将以一个空文件开始,您对它的迭代是无用的。最好的方法是使用解析器,例如。的第二个答案将有所帮助。(您希望使用来自BeautifulSoup的
导入BeautifulStoneSoup
并在解析中使用BeautifulStoneSoup)。无法解析[X]要清楚的是HTML-您是要在适当的位置更改文档,还是要将其写入新文档?@David Robinson。对于上面的示例,我试图在适当的位置更改它。然后我要修改它以创建一个新文档。它给出了错误AttributeError:'ElementTree'对象没有属性'itertext'@MajesticRa这很奇怪,也许您尝试使用“text”以外的另一种方法?您是否使用Python3?这可以解释更改,可能是此方法的名称更改了。或者,如果您知道字符串,您可以
tree=etree.fromstring(xml\u string)
,也可以将notag结尾为字节,这样您可能需要执行
解码('utf-8'))
单击以获取字符串。
import xml.etree.ElementTree as ET
...
tree = ET.fromstring(Text)
notags = ET.tostring(tree, encoding='utf8', method='text')
print(notags)