質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

554閲覧

テキスト中のurlの処理の仕方

makioo

総合スコア28

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/22 08:37

編集2019/04/22 08:41

やりたいこと

テキスト中のurlを削除しようと考えているのですがデータセットの中にスペルミスを含むものもあるためうまくいきません

今は

re.sub(r'https?://\S*','url',x)

xにテキストが入っています。
としているのですが、これでは
a = 'https : //www . gpo . gov/fdsys/pk'
のようにspaceが入っているもの
b = 'http(COLON)//hello'
c = 'http//aaa.c'
のように:がないものなど多数ありました。
これらを削除するにはどうしたらよいでしょうか

よろしくお願いします。

追記として
https(colon)(slash)(slash) gooogle(dot)org(slash)
のようなものもありました。

地道な手作業になるのでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/04/22 08:49

そのデータがどのようなものかわかりませんが、URL に共通するルールは見いだせますか? 頭は http から始まるとして、URL の終了条件に「スペースまで」というのが使えないので、それ以外でなにか URL の終わりを判定できるルールがあれば、正規表現でかけます。
makioo

2019/04/22 09:12

今の所(colon),(slash)は置換によりそれぞれ ./に変換できました。 ここからはhttp :// aaa/のようにurlの途中で空白が含まれていることがあるため、最後の/の後の文字列を読み込んだ後にurl全てを削除しようと考えています。 共通するデータとしては http(s)から始まりいくつかの/最後に文字列のような感じです。 わかりにくかったらすみません。
tiitoi

2019/04/22 09:19 編集

スペースがあるという条件のために機械的に判別するのはかなり難しいのではないかと思います。例えば、 「あいうえお http://a b/c/ d Hello World」 の例だと URL が 「http://a b/c/」か「http://a b/c/ d」か「http://a b/c/ d Hello」までかは判断が付きません。 そんなに数がないなら手動で削除したほうがはやいと思います。
makioo

2019/04/22 09:27

そこそこ数があるため手作業だと難しそうです。最後のslash以降にspaceが存在している数は少なそうですのでそこのみを手作業にしてみたいと思います。pythonで実行しているのですが/があったら繰り返すという処理はどのように描けばよいのでしょうか
tiitoi

2019/04/22 09:36

/ 以降は空白はないという前提で正規表現の例を回答に書きました。このサイト https://jex.im/regulex/ で正規表現が表す内容をチェックできます。
tiitoi

2019/04/22 09:38

すいません。 ちょっと試した感じうまくいかない例があったので、少し考えます。
makioo

2019/04/22 09:41

自分んもサイトで試させていただきます!
makioo

2019/04/22 09:50

すみません、うまくいかない例が思いつかないのですがどのようなものがあるのでしょうか...
tiitoi

2019/04/22 10:02

問題ないのであれば、それでよいと思います。 https : //www . gpo . gov/fdsys/pk http(COLON)//hello.com のように URL が2個並んでいた場合に1つのURLと認識されて置換されてしまいますが、そのようなケースがないのであればいいと思います。
makioo

2019/04/22 10:05

二つ並ぶことはみたところ存在しないようです。親切にありがとうございました!!
guest

回答1

0

ベストアンサー

import re text = ''' https : //www . gpo . gov/fdsys/pk http(COLON)//hello.com http//aaa.c https://teratail.com/questions/185791 Hello World あいうえお ''' text = re.sub(r'http.*?//(.+/)*\S+', 'url', text) print(text)
url url url url Hello World あいうえお

正規表現の内容

http.?//(.+/)\S*

イメージ説明

投稿2019/04/22 09:35

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問