在python中使用正则表达式删除XML中的空行?
对不起,如果以前有人问过这个问题,我在任何地方都找不到答案 我试图使用正则表达式来提取元素值,但是正在提取的xml包含一个空行,这似乎导致了错误 以下是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
<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"/>