如何获取字符串中的特定文本切片



我正在尝试与Instagram合作

所以,假设我有一个链接 https://www.instagram.com/p/Bn4Lmo_j0Jc/

我只想得到一个Bn4Lmo_j0jc。我可以删除此ID和最后一个/之前的所有内容

但是,如果我的链接看起来像这样呢: https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram 或此 https://www.instagram.com/p/Bn1GpYyBFSl/?hl=en&taken-by=zaralarsson,因此没有我需要删除的确切字符数。解决这个问题的最简单方法是什么?

这个怎么样?

import urllib
url = 'https://www.instagram.com/p/Bn4Lmo_j0Jc/'
parts = urllib.parse.urlparse(url)
parts.path
'/p/Bn4Lmo_j0Jc/'
from urllib import parse
def getId(url):
return parse.urlparse(url).path[3:-1]
print(getId('https://www.instagram.com/p/Bn1GpYyBFSl/?hl=en&taken-by=zaralarsson'))
print(getId('https://www.instagram.com/p/Bn4Lmo_j0Jc/'))
print(getId('https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram'))

输出:

Bn1GpYyBFSl
Bn4Lmo_j0Jc
Bn4Lmo_j0Jc

你可以在这里使用正则表达式。它还可以处理您的 url 是否在您关注的 ID 字段后有多个/p/

import re
a=['https://www.instagram.com/p/Bn1GpYyBFSl/?hl=en&taken-by=zaralarsson',
'https://www.instagram.com/p/Bn4Lmo_j0Jc/',
'https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram/p/12321']
[re.findall('/p/(w{1,})',i)[0] for i in a]
lst = link.split("/")
lst[-1] if not lst[-1].startswith("?") and lst[-1] else lst[-2]

其中link是链接字符串。

(结果是lst中的最后一个元素,如果它不是以?开头并且不为空- 否则结果是最后一个元素,而是一个元素。

一致的格式

鉴于您将始终有一个 URL https://instagram.com/p/,您所需要的只是使用字符串解释器。

base_url = 'https://instagram.com/p/' 
main = 'https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram'
# remove your base url
# split on separator '/'
# select the ID in index [0]
main.replace(base_url,'').split('/')[0]
'Bn4Lmo_j0Jc'

用于循环

如果您有要提取和捕获的 URL 列表:

url_base = 'https://instagram.com/p/' 
url_list = [url1,url2,url3]
id_list = []
for url in url_list:   
id_list.append(url.replace(url_base,'').split('/')[0])

最新更新