スポンサーリンク

python 正規表現でURLの一致チェック、抽出を行う

URLの正規表現パターンの解説

URLを正規表現のパターンとして表す時、下記のようになる。

https?://[\w/:%#\$&\?\(\)~\.=\+\-]+”

先頭から解説していきます。

https?

https?はhttpは必ず先頭につき、s?でsが0~1回の繰り返しという意味の為、

http or https が先頭のものを意味します。

://

://はそのまま、http or httpsの次に必ず続く文字列で、それに一致するかどうかチェックします。

[\w/:%#$&\?\(\)~\.=\+\-]+

1つずつ解説していきます。[・・・]+は、[]内にある文字の1回以上の繰り返しを意味します。
[]の中身ですが、\wは半角英数字と_を表します。ほかの\○は、○の文字を意味します。
[]内の中身が、http://以降の文字として使われるので、それを正規表現で表しています。

一致チェック

文字列がURLかどうかを、
正規表現を使ってチェックします。

サンプルコード

# -*- coding: utf-8 -*-
import re

pattern = "https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
url_list = ["https://qiita.com/", "ftp://hogehoge.com", "http://e-words.jp/"]

for url in url_list:
    if re.match(pattern, url):
        print("Is URL:" + url)
    else:  
        print("Not URL:" + url)

 

実行結果

Is URL:https://qiita.com/
Not URL:ftp://hogehoge.com
Is URL:http://e-words.jp/

解説

re.match()で正規表現にマッチするかを判断しています。
urlがpatternにマッチしていると、オブジェクトを返し、
マッチしていないなら、Noneを返します。

URL抽出

文字列に含まれたURLを正規表現を使って全て抽出します。

サンプルコード

# -*- coding: utf-8 -*-
import re

pattern = "https?://[\w/:%#\$&\?\(\)~\.=\+\-]+"
text = """QiitaのURLはhttps://qiita.com/です。
PyhtonのWikiは右のURLです。https://ja.wikipedia.org/wiki/Python
このテキストからURLを抽出します。
"""

url_list = re.findall(pattern, text)
print(url_list)

実行結果

[‘https://qiita.com/‘, ‘https://ja.wikipedia.org/wiki/Python‘]

解説

re.findallは、文字列の中から、正規表現にマッチした文字列をリストにして全て取り出します。
このやり方は、スクレイピンなどでもよく使われるので覚えておくとよいです。

関連記事