urllib を使用すると、文字列を解析して、それが有効な URL かどうかを確認できます。しかし、文に URL が含まれているかどうかを確認し、その URL を抽出するにはどうすればよいでしょうか。いくつかの巨大な正規表現を見てきましたが、本当に理解できないものは使用したくありません。
つまり、基本的に入力文字列があり、その文字列内のすべての URL を見つけて抽出する必要があります。
これについてのきれいな方法は何ですか。
を含む「単語」を検索し:
、urlparse
(Python 3.0 以降では名前が変更されurllib.parse
た) に渡して、それらが有効な URL であるかどうかを確認できます。
例:
possible_urls = re.findall(r'\S+:\S+', text)
http://
or https://
(または許可したいもの)で始まる URL のみに制限したい場合は、正規表現を使用してそれを行うこともできます。次に例を示します。
possible_urls = re.findall(r'https?://\S+', text)
URL に句読点を追加して、新しい有効な URL を意図せずに間違ったものにすることがあるため、ヒューリスティックを使用して URL の開始位置と停止位置を決定することもできます。次に例を示します。
http://example.com/の新しい外観を見ましたか? これはhttp://example.org/の完全なぼったくりです!
ここで、URL の後の句読点は、URL の一部であることを意図していません。上記のテキストに自動的に追加されたリンクから、StackOverflow がそのようなヒューリスティックを実装していることがわかります。
「野生」からURLを抽出することは、(正しく行うために)トリッキーな試みです。Jeff Atwoodは、このテーマに関するブログ投稿を書きました。URLの問題また、John Gruberもこの問題に対処しています。URLを照合するための改善されたリベラルで正確な正規表現パターン また、この問題に取り組むためのコードをいくつか作成しました。URLリンク化(HTTP / FTP)(PHP / Javascriptの場合)。(私の正規表現は、HTMLマークアップに適用されるように設計されており、すでにリンクされているURL(つまり、<ahref = "http://example.com">リンク!</a>)をスキップしようとするため、特に複雑であることに注意してください。 )。
次に、 URI / URLの検証に関しては、調べたいドキュメントはRFC-3986です。私はこの主題を扱った記事に取り組んできました:正規表現URI検証。これも見てみたいと思うかもしれません。
しかし、あなたがそれに取り掛かるとき、これは簡単な仕事ではありません!