2017-02-09 10 views
0

私は与えられたWebページ内のすべてのURLと一致するように、このパターンを使用します。パイソン - 正規表現のページのソースコード内のURLにマッチする

import re 

source = """ 
<p>https://example.com</p> 
... some code 
<font color="E80000">https://example.com</font></a> 
""" 

urls = re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[[email protected]&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', source) 

これはかなりよく、今まで私のために働いています。私は時にはそれが正確なURLに一致しないことがわかった。例のようにURLはhttps://example.com</p>https://example.com</font></a>のようにマッチしますが、正規表現の問題点はわかりません。私は別のスタックの質問からこのコードを取った。

+1

、これを試してみてください手紙など'[$ -_ @。&+]'を '[ - $ _ @。&+]'に置き換えてください。 –

+0

このリンクを参照してくださいhttp://stackoverflow.com/questions/499345/regular-expression-to-extract-url-from-an-html-link –

+0

これもチェックできますhttp://stackoverflow.com/questions/6883049/regex-to-find-url-in-pythonの文字列 –

答えて

0

あなたは `<` and `>`を一致させることができる範囲を作成する二つのシンボル間の文字クラス、 `[$ -_]`、、およびすべてのASCII数字と大文字の内部にハイフンを使用

import re 

source = """ 
<p>https://example.com</p> 
... some code 
<font color="E80000">https://example.com</font> 
https://example.com</p></a> 
https://example.com</font></a> 
""" 
urls = re.findall('(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\[email protected]?^=%&/~+#-])?', source) 
print urls