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は、文字列の中から、正規表現にマッチした文字列をリストにして全て取り出します。
このやり方は、スクレイピンなどでもよく使われるので覚えておくとよいです。
関連記事