2011-02-06 9 views
1

私はPythonで正規表現のマッチ関数を使っています。私は次のコードを持っています:イメージタグのリンクと正規表現との一致方法

def src_match(line, img): 
    imgmatch = re.search(r'<img src="(?P<img>.*?)"', line) 

    if imgmatch and imgmatch.groupdict()['img'] == img: 
     print 'the match was:', imgmatch.groupdict()['img'] 

上記はまったく正しく動作していないようです。これがあること(またはその両方が動作するはずのように、多分それはそうならば)なぜ

def href_match(line, url): 
    hrefmatch = re.search(r'<a href="(?P<url>.*?)"', line) 

    if hrefmatch and hrefmatch.groupdict()['url'] == url: 
     print 'the match was:', hrefmatch.groupdict()['url'] 
    else: 
     return None 

誰かが説明してくださいすることができます:私はこれで運を持っている一方でを行う?たとえば、href_match()関数に識別子に関する特別なものがありますか? 両方の関数で、私が探している文字列を含む行とその文字列の両方を渡していると仮定することができます。

EDIT: は私が私の好きなタグを取得することはありません確信していることを言及する必要があります:

<img width="200px" src="somefile.jpg"> 

この理由は、私はそれをHTMLを生成している特定のプログラムを使用していますということですそのようなタグを決して出すことはありません。この例では、私はいつものように、タグを取得するつもりだ仮定の中に純粋に理論的と解釈されるべきである。

<img src="somefile.jpg"> 

編集:ここ

は私が摂食していますラインの一例です関数は、入力引数と一致しません:

<p class="p1"><img src="myfile.anotherword.png" alt="beat-divisions.tiff"></p> 
+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Pepe

+0

こちらの回答は下記のとおりです。後半のリンク)。これは少なくとも役立つものではなく、その質問に答えません。確かに、私が学ぶのを助ける私の問題に対する答えがあります。 – jml

+0

以下の私の答えによれば、関数はどちらも私のために働きます(対話シェルのWindows 7のPython 2.7.1)。あなたはうまくいくはずの入力の反例を与えることができますか?失敗しますか? –

答えて

1

ルール#37:正規表現でHTMLを解析しようとしません。

ジョブには、この場合はBeautifulSoupという正しいツールを使用します。

編集:

カット・アンド・ペースト

>>> src_match('this is <img src="my example" />','my example') 
the match was: my example 

としての機能とテストを機能するように見えます。しかし、それは

<img width="200px" src="Y U NO C ME!!" /> 

Edit4のように(完全に有効な)HTMLコードに失敗します:

>>> src_match('<p class="p1"><img src="myfile.png" alt="beat-divisions.tiff"></p>','myfile.png') 
the match was: myfile.png 
>>> src_match('<p class="p1"><img src="myfile.anotherword.png" alt="beat-divisions.tiff"</p>\n','myfile.anotherword.png') 
the match was: myfile.anotherword.png 

はまだ動作します。あなたが照合しようとしているURLの値が正しいことは確かですか?

+0

私はこのことについて投稿をするたびにこのことを説明しなければならないということは私には陽気ですが、私は再びこれを言うでしょう:私はこの機能を持つ包括的なパーサを構築しようとしていません。それは小さい仕事であり、それは他の場合に働く。 2つの別個のタグ以外のものを解析しようとしているわけではないことに気づくでしょう。そして、何よりも、プロセス中のPythonで正規表現について学びたいと思っています。 – jml

+0

ありがとうございます。それはでしょうか? – jml

+0

FWIW、私はHTMLを生成する特定のプログラムを持っているので、すべてのタグがどのように見えるかを正確に知っています。あなたの例は有効ですが、それ自体はhtmlを生成しません。 – jml

関連する問題