2011-01-11 10 views
0

私はすでに投稿したものと同じHTMLに戻ります。私が他の方法があることを知っていても、少しRegExを学ぶことを試みている。で何かを一致させるにはPython Regex - IronPythonではなくExpressoで動作します

publisher.php\?c=.*?\">(.*?)</a>(?:.*?)<br\s\\>(?:[\s\r\n]*?)Date:\s<time\sdatetime="(.*?)\">(?:.*?)(?:[\s\r\n]*?)Pages:\s*?(\d*?)<br\s\\> 

:私は

私の表現がある...ちょうど挑戦のように、ダムないんだけど、私はエスプレッソでそれをテストする場合

<p>Country: <a href="country.php?c=it">Italy</a><br \> 
      Publication: <a href="publication.php?c=it/TL">Topolino (libretto)</a></p> 
       Publisher: <a href="publisher.php?c=Mondadori">Mondadori</a><br><br \> 
        Date: <time datetime="1970-11-22">November 22, 1970</time><br \> 
        Pages: 196<br \> 

        Price: 150 Lit. <br \> 
        <span class="indexedBy">Index delivered by: <a href="mag-inx.php?c=ABo">ABo</a></span> 

正常に動作しますが、私がPythonで動かすと、私の結果はすぐにグループ1になりません...

手がかりはありますか?

おかげで、

M

+3

なぜ正規表現でHTMLを処理していますか? – Tomalak

+0

学習しますか?私の心の中でPythonとRegExの両方を手に入れる最良の方法は?誰もがそれをしないと言いますから? :-) – Maurizio

+0

私は自分の答えを更新しました。 –

答えて

2
  1. 正規表現のすべての実装は微妙な違いがあります。それはexpressoで動作しても、Pythonで動作するわけではありません。また、空白などのデフォルトのフラグをデフォルトにすることもできます。

  2. 大文字小文字が区別されない限り、HTMLまたはXMLにマッチさせるためにregexpを使用しないでください。 lxmlまたはBeautifulSoupのようなHTML/XML向けのライブラリを使用してください。

  3. あなたの正規表現は巨大で、何がうまくいくかを考えようと思っています。 2を参照してください。

  4. \\>これを実行すると、バックスラッシュと大括弧を作成します。正規表現は、これをリテラルブラケットとして解釈します。 \\\>、またはそれより良いバックスラッシュが3つ必要です。生の文字列を使用します。つまり、 ''の代わりにr "'を使用します。

  5. BeautifulSoupを使用してください。本当に。

+0

OK、私はあなたにタイレノールを与えます:-)ちょうど答える時間を取るために。あなたは知っている、私は学んでいると私の間違いをする必要が... libsを使用することはできません、周りにこだわるこだわりに...ありがとう! – Maurizio

+1

@Maurizio:なぜ "libs"を使用できないのですか? BeautifulSoupは純粋なpython afaikです。 –

+1

@Maurizio学習しているのでライブラリを使用できない場合、パーサを書くことはマゾヒズムの正規表現よりも優れた学習経験になります。 – aaronasterling

0

どのようにPythonで実行していますか?あなたは生の弦としてそれをエスケープしていますか?複数行フラグを追加しましたか?

問題を引き起こす可能性のある方法で、二重引用符、一重引用符、およびバックスラッシュを混在させています。たとえば、このビットは奇妙に見えます。

c=.*?\"> 

しかし、Linux x86ではPython 2.6.6でうまくいくようです。

$ cat expresso.py 
import re 

str = r'''<p>Country: <a href="country.php?c=it">Italy</a><br \> 
      Publication: <a href="publication.php?c=it/TL">Topolino (libretto)</a></p> 
       Publisher: <a href="publisher.php?c=Mondadori">Mondadori</a><br><br \> 
        Date: <time datetime="1970-11-22">November 22, 1970</time><br \> 
        Pages: 196<br \> 

        Price: 150 Lit. <br \> 
        <span class="indexedBy">Index delivered by: <a href="mag-inx.php?c=ABo">ABo</a></span>''' 

pat = r'publisher.php\?c=.*?\">(.*?)</a>(?:.*?)<br\s\\>(?:[\s\r\n]*?)Date:\s<time\sdatetime="(.*?)\">(?:.*?)(?:[\s\r\n]*?)Pages:\s*?(\d*?)<br\s\\>' 
res = re.search(pat, str, re.MULTILINE) 
print res.groups() 

$ python expresso.py 
('Mondadori', '1970-11-22', '196') 
+0

それは明らかにそのすべての特質を持つHTMLコードです!それがうまくいくかどうかの確認は私にとっては良いことです!最終的に、私が言ったように、これは主に私が学ぶことです、洗練され、優雅さは後で来るでしょう... – Maurizio

関連する問題