2009-03-02 15 views
3

がある場合、アンカーテキストを検索:私は<のペアの間にテキストここに私がコンテンツを見つけるために使用している再文字列だ特定のサイト</p> <p>にリンク>タグを見つけたいが、タグ

r'''(<a([^<>]*)href=("|')(http://)?(www\.)?%s([^'"]*)("|')([^<>]*)>([^<]*))</a>''' % our_url 

結果はこのようなものになります。

r'''(<a([^<>]*)href=("|')(http://)?(www\.)?stackoverflow.com([^'"]*)("|')([^<>]*)>([^<]*))</a>''' 

これは、ほとんどのリンクのための素晴らしいですが、それ内のタグ付きのリンクを持つことのエラー。

([^<]*))</a>''' 

へ:

(.*))</a>''' 

をしかし、それはちょうど私が望んでいないリンク、後のページ上のすべてを持って、私は正規表現からの最後の部分を変更してみました。私がこれを解決するために何ができるかについての提案はありますか?

答えて

3

の代わりすなわち、非欲張り探索:

[^<>]* 

試してみてください。つまり

((?!</a).)* 

の開始ではない任意の文字にマッチ</a配列。

+0

大変ありがとうございました。 – Teifion

2

私は正規表現を使用しません - Beautiful SoupのようなHTMLパーサを使用してください。

+0

このような単純な問題のために少し重量があるようです。 – Teifion

+0

しないでください。 HTMLは非常に不規則です。ブラウザは多数のエラーに耐える必要があります。美しいスープは、正規表現よりも不規則なHTMLをより良く処理できます。 –

1

います

(.*?) 
+0

アンカーテキスト内のタグまで一致します – Teifion

3
>>> import re 
>>> pattern = re.compile(r'<a.+href=[\'|\"](.+)[\'|\"].*?>(.+)</a>', re.IGNORECASE) 
>>> link = '<a href="http://stackoverflow.com/questions/603199/finding-anchor-text-when-there-are-tags-there">Finding anchor text when there are tags there</a>' 
>>> re.match(pattern, link).group(1) 
'http://stackoverflow.com/questions/603199/finding-anchor-text-when-there-are-tags-there' 
>>> re.match(pattern, link).group(2) 
'Finding anchor text when there are tags there' 
+0

これはありがとうございました。 –

関連する問題

 関連する問題