私が現在取り組んでいるプログラムは、WebサイトからURLを取得し、それらをリストに入れます。取得したいのは、URLの最後のセクションです。
つまり、私のURLリストの最初の要素が"https://docs.python.org/3.4/tutorial/interpreter.html"
前にすべてを削除したい"interpreter.html"
。
これを実現するために使用できる関数、ライブラリ、または正規表現はありますか?他のスタックオーバーフローの投稿を確認しましたが、ソリューションが機能していないようです。
これらは私のいくつかの試みのうちの2つです。
for link in link_list:
file_names.append(link.replace('/[^/]*$',''))
print(file_names)
&
for link in link_list:
file_names.append(link.rpartition('//')[-1])
print(file_names)
str.rsplit
をご覧ください。
>>> s = 'https://docs.python.org/3.4/tutorial/interpreter.html'
>>> s.rsplit('/',1)
['https://docs.python.org/3.4/tutorial', 'interpreter.html']
>>> s.rsplit('/',1)[1]
'interpreter.html'
そして、RegExを使用するには
>>> re.search(r'(.*)/(.*)',s).group(2)
'interpreter.html'
次に、最後の/
と文字列の終わりの間にある2番目のグループを照合します。これは、RegExの貪欲な手法の貪欲な使用法です。
小さな注意-コード内のlink.rpartition('//')[-1]
の問題は、//
ではなく/
と一致させようとしていることです。 link.rpartition('/')[-1]
のように余分な/
を削除します。
それは正規表現を必要としません。
import os
for link in link_list:
file_names.append(os.path.basename(link))
rpartition() を使用できます。
>>> s = 'https://docs.python.org/3.4/tutorial/interpreter.html'
>>> s.rpartition('/')
('https://docs.python.org/3.4/tutorial', '/', 'interpreter.html')
そして、返される3つの要素Tupleの最後の部分を取得します。
>>> s.rpartition('/')[2]
'interpreter.html'
String.splitを使用するだけです。
url = "/some/url/with/a/file.html"
print url.split("/")[-1]
# Result should be "file.html"
splitは、「/」で区切られたストリングの配列を提供します。 [-1]は、配列の最後の要素を提供します。これが必要なものです。
これは、正規表現を使用する場合に機能するはずです。
for link in link_list:
file_names.append(link.replace('.*/',''))
print(file_names)
これを行う、より一般的な正規表現の方法を次に示します。
re.sub(r'^.+/([^/]+)$', r'\1', "http://test.org/3/files/interpreter.html")
'interpreter.html'