web-dev-qa-db-ja.com

最後のスラッシュの前の文字列の一部を削除

私が現在取り組んでいるプログラムは、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)
11
freddiev4

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の貪欲な手法の貪欲な使用法です。

Regular expression visualization

Debuggexデモ

小さな注意-コード内のlink.rpartition('//')[-1]の問題は、//ではなく/と一致させようとしていることです。 link.rpartition('/')[-1]のように余分な/を削除します。

25
Bhargav Rao

それは正規表現を必要としません。

import os

for link in link_list:
    file_names.append(os.path.basename(link))
9
TigerhawkT3

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'
5
dawg

String.splitを使用するだけです。

url = "/some/url/with/a/file.html"

print url.split("/")[-1]

# Result should be "file.html"

splitは、「/」で区切られたストリングの配列を提供します。 [-1]は、配列の最後の要素を提供します。これが必要なものです。

1
McCroskey

これは、正規表現を使用する場合に機能するはずです。

 for link in link_list:
    file_names.append(link.replace('.*/',''))
 print(file_names)
0
deme72

これを行う、より一般的な正規表現の方法を次に示します。

    re.sub(r'^.+/([^/]+)$', r'\1', "http://test.org/3/files/interpreter.html")
    'interpreter.html'
0
sandoronodi