在python中使用正则表达式删除XML中的空行?

在python中使用正则表达式删除XML中的空行?,python,xml,regex,spaces,Python,Xml,Regex,Spaces,对不起,如果以前有人问过这个问题,我在任何地方都找不到答案 我试图使用正则表达式来提取元素值,但是正在提取的xml包含一个空行,这似乎导致了错误 以下是XML中的一个元素: <entry> <id>http://feeds.rasset.ie/rteavgen/player/videos/show/?id=10103822</id> <showid>10103822</showid> <platform&g

对不起,如果以前有人问过这个问题,我在任何地方都找不到答案

我试图使用正则表达式来提取元素值,但是正在提取的xml包含一个空行,这似乎导致了错误

以下是XML中的一个元素:

<entry>
    <id>http://feeds.rasset.ie/rteavgen/player/videos/show/?id=10103822</id>
    <showid>10103822</showid>
    <platform>iptv</platform>
    <published>2013-01-19T21:45:00+00:00</published>
    <updated>2013-01-19T23:41:00+00:00</updated>
    <title type="text">The Saturday Night Show</title>
    <content type="text">Chat show, presented by journalist and broadcaster Brendan O'Connor, featuring comedy, celebrity guests and live musical performances.</content>
    <category term="RTÉ One" rte:type="channel"/>
    <category term="Entertainment" rte:type="genre"/>
    <category term="None" rte:type="series"/>
    <category term="None" rte:type="episode"/>
    <category term="None" rte:type="ranking"/>
    <category term="1024" rte:type="genrelist"/>
    <category term="None" rte:type="keywordlist"/>
    <category term="1668" rte:type="progid"/>
    <link rel="self" type="application/atom+xml" href="http://feeds.rasset.ie/rteavgen/player/playlist?showId=10103822"/>

    <link rel="alternate" type="text/html" href="http://www.rte.ie/player/#v=10103822"/>
    <rte:valid start="2013-01-19T21:52:12+00:00" end="2013-02-09T21:52:12+00:00"/>
    <rte:duration ms="4201061" formatted="1:10"/>
    <rte:statistics views="194"/>
    <media:title type="plain">The Saturday Night Show</media:title>
    <media:description type="plain">Chat show, presented by journalist and broadcaster Brendan O'Connor, featuring comedy, celebrity guests and live musical performances.</media:description>
    <media:player url="http://feeds.rasset.ie/rteavgen/player/player/?id=" width="400" height="300"/>
    <media:thumbnail url="http://img.rasset.ie/0006e56a.jpg" time="00:00:00+00:00"/>
    <media:restriction relationship="allow" type="country"/>
    <media:restriction relationship="disallow" type="country"/>
    <media:copyright>RTÉ</media:copyright>
</entry>

http://feeds.rasset.ie/rteavgen/player/videos/show/?id=10103822
10103822
网络电视
2013-01-19T21:45:00+00:00
2013-01-19T23:41:00+00:00
周六晚间秀
由记者兼广播员布伦丹·奥康纳主持的聊天节目,包括喜剧、名人嘉宾和现场音乐表演。
周六晚间秀
由记者兼广播员布伦丹·奥康纳主持的聊天节目,包括喜剧、名人嘉宾和现场音乐表演。
勒泰
您可以看到在两个“link rel=”元素之间有一个空行

当我尝试使用这个regex命令时,它会抛出超时!错误,因为我没有正确处理这个问题(请原谅,我的正则表达式知识几乎为零)

links=(重新编译(“(.+?)\n”\
“.+?\n”\
“(.+?)\n”\
“.+?\n”\
“(.+?)\n”\
“(.+?)\n”\
“\n”\
“\n”\
“\n”\
“\n”\
“\n”\
“\n”\
“\n”\
“\n”\
“\n”\
'').findall(数据)
我实际上只需要几个字段,但我似乎找不到一个regex命令,它允许我只选择我想要的单个元素名称,它让我按顺序输入每个元素(同样,我缺乏regex知识是问题所在)。除了我需要的第二个“link rel=”元素之外,还有一些字段是我需要的,但由于它在这一个元素上不断出现问题,我暂时将其忽略

<> P>任何人都知道ReGeX命令需要跳过空白行,也可能需要整理表达式以只提取所需的元素?


感谢各位的帮助,我希望…

要删除空行,您不需要正则表达式:

with open("my_file.xml") as xmlfile:
    lines = [line for line in xmlfile if line.strip() is not ""]

with open("my_file.xml", "w") as xmlfile:
    xmlfile.writelines(lines)
另外,要解析
xml
文件,您可以简单地使用expat:甚至可能使用mini-dom:另一种非常好的方法是ElementTree:


但是,不推荐使用正则表达式,实际上这是一个坏主意。

正如其他人所说,您不应该使用正则表达式来完成此任务

回答您的实际问题:您对元素之间的空白太具体了。在这种情况下,额外的空白会给您带来问题。很可能没有空白:

<category term="None" rte:type="ranking"/><category term="1024" rte:type="genrelist"/>


补救措施:不要使用
\n
后跟8个空格,而是使用
\s*
(零个或更多空格字符)。

有什么理由不使用库来解析expat或elementtree之类的XML?谢谢您的回答。如果我使用这个expat,那么我如何从元素中获取值,比如我想在这里获取“RTE One”或者在中获取缩略图的URL?有没有理由不推荐ElementTree实现?这行代码,lines=[如果line.strip()不是“”,请将输出XML放入一个长字符串或每个字符中。。这里有一个片段:['@JohnMachin不知道,我自己还没有真正使用过它。添加了:)@user1995132现在无法测试它,而且我自己似乎没有意识到这个问题,应该开始测试它。如果line.strip()不是“”,请尝试将行切换到
lines=[xmlfile.readlines()中的行对行]
再次感谢!如果我使用一些xml解析器,那么我将如何从元素中获取值,如我希望在此处获取“RTE One”或中获取缩略图的URL?@user1995132:Re“一些xml解析器”,请另外提问。
<category term="None" rte:type="ranking"/><category term="1024" rte:type="genrelist"/>