0

これが以前に尋ねられた場合は申し訳ありませんが、どこにも答えが見つかりません..

正規表現を使用して要素の値を抽出しようとしていますが、プルされる xml に空白行が含まれているため、エラーが発生しているようです。

XML の要素の 1 つを次に示します。

<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>

2 つの "link rel=" 要素の間に空白行があることがわかります。

この正規表現コマンドを使用しようとすると、Timeout! がスローされます。これを適切に処理していないため、エラーが発生しました(正規表現の知識がほとんどゼロであるため、すみません)。

links = (re.compile ('<showid>(.+?)</showid>\n        ' \
                         '<platform>.+?</platform>\n        ' \
                         '<published>(.+?)</published>\n        ' \
                         '<updated>.+?</updated>\n        ' \
                         '<title type="text">(.+?)</title>\n        ' \
                         '<content type="text">(.+?)</content>\n        ' \
                         '<category term="(.+?)" rte:type="channel"/>\n        ' \
                         '<category term=".+?" rte:type="genre"/>\n        ' \
                         '<category term=".+?" rte:type="series"/>\n        ' \
                         '<category term=".+?" rte:type="episode"/>\n        ' \
                         '<category term=".+?" rte:type="ranking"/>\n        ' \
                         '<category term=".+?" rte:type="genrelist"/>\n        ' \
                         '<category term=".+?" rte:type="keywordlist"/>\n        ' \
                         '<category term=".+?" rte:type="progid"/>\n        ' \
                         '<link rel="self" type=".+?" href=".+?" />\n        ' \
                         '<link rel="alternate" type=".+?" href=".+?" />').findall(data))

実際にはいくつかのフィールドだけが必要ですが、必要な個々の要素名を選択できる正規表現コマンドが見つからないようです。それぞれを順番に入力する必要があります(繰り返しますが、私の正規表現の知識の欠如は問題)。私が必要とする 2 番目の "link rel=" 要素を超えて必要なフィールドがありますが、この要素に落ち続けるので、今のところそれらを省略しました。

空白行をスキップし、必要な要素のみを抽出するために式を整理するために必要な正規表現コマンドを知っている人はいますか?

助けてくれてありがとう、私は願っています...

4

2 に答える 2

2

空行を削除するには、正規表現は必要ありません。

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: http://docs.python.org/2/library/pyexpat.htmlまたは mini dom: http://docs.python.org/2/library/xml を使用できます。 dom.minidom.html別の本当に良い方法は ElementTree です: http://docs.python.org/2/library/xml.etree.elementtree.html

ただし、これには正規表現は推奨されておらず、実際には悪い考えです。

于 2013-01-20T18:50:18.543 に答える
0

他の人が言ったように、このタスクに正規表現を使用しないでください。

実際の質問への回答:要素間の空白について具体的すぎます。この場合、問題を引き起こしているのは余分な空白です。それは簡単に空白ではない可能性があります:

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

\n対処法: 8 つのスペースを使用する代わりに、 \s*(0 個以上の空白文字) を使用します。

于 2013-01-20T20:27:33.573 に答える