1

この質問が以前に寄せられた場合は申し訳ありませんが、主に例が不足しているため、Python 正規表現のドキュメントは非常に理解しにくいと思います。ページ ソースのブロックを取得して、後で再度解析したいと考えています。例えば:

    <div id="viewed"><div class="shortstory-block">

    <div class="shortstoey-block-image">
        <a href="...."><img src="/uploads/posts/cov.jpg" alt="instance 1"/></a>
        <span class="format"><a href="http://www..../">something</a></span>
    </div>

    <a href="http://....."><span class="shortstory-block-title" style="text-decoration:none !important;">
        Something
    </span>
    </a>

</div><div class="shortstory-block">

    <div class="shortstoey-block-image">
        <a href="...."><img src="/uploads/posts/cov.jpg" alt="something 2"/></a>
        <span class="format"><a href="http://www.website/xfsearch/smth/">something</a></span>
    </div>

    <a href="http://web.html"><span class="shortstory-block-title" style="text-decoration:none !important;">
        Something
    </span>
    </a>
 </div>
  (* x times)
     <div id="rated">....

変数 (html_source) にすべてのページ ソースがあり、このコード ブロック (div id="viewed" と div id="rated" の間) のみで別の変数を定義したいと考えています。2 つのインスタンスの間に \n または \r があるにもかかわらず、すべてを取得したいと考えています。

誰かが私を正しい方向に向けることができますか (正規表現)?

前もって感謝します

4

2 に答える 2

2

実際に、テキストの 2 つの要素の間で何かを見つけようとしているだけの場合は、次の正規表現を使用できます。

import re

with open('yourfile') as fin:
    page_source = fin.read()

start_text = re.escape('<div id="viewed">')
until_text = re.escape('<div id="rated">')
match_text = re.search('{}(.*?){}'.format(start_text, until_text), page_source, flags=re.DOTALL)
if match_text:
    print match_text.group(1)
于 2013-07-21T22:13:26.220 に答える
1

re.DOTALL旗は. 任意の文字に一致します。そのフラグがないと、改行に一致しません。

(DOTALL は、正規表現自体で綴ることもできます(?s)。)

コード サンプルとこれを行うためのより良い方法を含む同様の質問については、 「Python の "re" モジュールが機能していませんか?」を参照してください。

于 2013-07-21T22:13:03.630 に答える