Как получить буквы в выражении на Python

У меня есть такое выражение:

<a class = "a-link-normal" href = "https://www.amazon.it/Philips-GC8735-PerfectCare-Generatore-Vapore/dp/B01J5FGW66/ref=gbph_img_s-3_7347_c3de3e94?smid=A11IL2PNWYJU7H&amp;pf_rd_p=82ae57d3-a26a-4d56-b221-3155eb797347&amp;pf_rd_s=slot-3&amp;pf_rd_t=701&amp;pf_rd_i=gb_main&amp;pf_rd_m=A11IL2PNWYJU7H&amp;pf_rd_r=MDQJBKEMGBX38XMPSHXB" id = "dealImage"></a>

И мне нужно получить 10 букв рядом с "/ dp /" (B01J5FGW66)

Как я могу сделать функцию, которая это сделает?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
85
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Использование регулярного выражения:

import re
s = '<a class = "a-link-normal" href = "https://www.amazon.it/Philips-GC8735-PerfectCare-Generatore-Vapore/dp/B01J5FGW66/ref=gbph_img_s-3_7347_c3de3e94?smid=A11IL2PNWYJU7H&amp;pf_rd_p=82ae57d3-a26a-4d56-b221-3155eb797347&amp;pf_rd_s=slot-3&amp;pf_rd_t=701&amp;pf_rd_i=gb_main&amp;pf_rd_m=A11IL2PNWYJU7H&amp;pf_rd_r=MDQJBKEMGBX38XMPSHXB" id = "dealImage"></a>'
print(re.search(r"dp/([A-Za-z0-9]{10})/", s)[1])

Выход: B01J5FGW66

Объяснение:

начинаются с "dp/":

dp/ 

группа захвата, разделенная () соответствующими 10 (до {10}) строчными буквами (a-z), заглавными буквами (A-Z) и цифрами (0-9):

([A-Za-z0-9]{10})

конец на "/":

/

Используя re.search, мы можем найти это выражение в вашей строке s и получить доступ к результатам для 1-й группы захвата с помощью [1].

Примечание, что вы можете добавить дополнительный код на случай, если совпадение не будет найдено:

m = re.search(r"dp/([A-Za-z0-9]{10})/", s)
if m is not None:
    print(m[1])
else:
    # if nothing is found, search return None
    print("No match")

Большое спасибо, я все понимаю, но у меня последняя ошибка: return _compile (шаблон, флаги) .search (строка) TypeError: ожидаемая строка или байтовый объект Я пробовал использовать str (), но не работает

M. T. 07.09.2018 17:15

Какой тип переменной вы передаете search в качестве второго аргумента

FlyingTeller 07.09.2018 18:14

тип <класс 'bs4.element.Tag'>, как я могу решить эту проблему?

M. T. 07.09.2018 19:34

Попробуйте добавить ["href"]

FlyingTeller 07.09.2018 19:45

Что вы имеете в виду под словом «добавить»? У меня есть переменная, содержащая царапины на странице, как я могу «добавить»?

M. T. 07.09.2018 19:49

если ваша переменная была названа s, попробуйте re.search(r"dp/([A-Za-z0-9]{10})/", s["href"])

FlyingTeller 07.09.2018 19:51

там написано TypeError: 'NoneType' object is not subscriptable

M. T. 07.09.2018 19:55

Я предполагаю, что вам всегда нужно только то, что находится между косой чертой рядом с dp (следующий маршрут), и что 10 символов не имеют значения. Немного неуклюже, но это работает:

>>> x = '<a class = "a-link-normal" href = "https://www.amazon.it/Philips-GC8735-PerfectCare-Generatore-Vapore/dp/B01J5FGW66/ref=gbph_img_s-3_7347_c3de3e94?smid=A11IL2PNWYJU7H&amp;pf_rd_p=82ae57d3-a26a-4d56-b221-3155eb797347&amp;pf_rd_s=slot-3&amp;pf_rd_t=701&amp;pf_rd_i=gb_main&amp;pf_rd_m=A11IL2PNWYJU7H&amp;pf_rd_r=MDQJBKEMGBX38XMPSHXB" id = "dealImage"></a>'
>>> splits = x.split("/")
>>> dp_index = splits.index('dp')
>>> result = splits[dp_index+1] # Get the next one over
>>> result
'B01J5FGW66'

чтобы поместить его в функцию, вы можете сделать это так:

def get_route_next_to_dp(html_str):
    splits = html_str.split("/")
    dp_index = splits.index('dp')
    result = splits[dp_index+1] # Get the next one over
    return result

Использование может выглядеть так:

html_str = '<a class = "a-link-normal" href = "https://www.amazon.it/Philips-GC8735-PerfectCare-Generatore-Vapore/dp/B01J5FGW66/ref=gbph_img_s-3_7347_c3de3e94?smid=A11IL2PNWYJU7H&amp;pf_rd_p=82ae57d3-a26a-4d56-b221-3155eb797347&amp;pf_rd_s=slot-3&amp;pf_rd_t=701&amp;pf_rd_i=gb_main&amp;pf_rd_m=A11IL2PNWYJU7H&amp;pf_rd_r=MDQJBKEMGBX38XMPSHXB" id = "dealImage"></a>'
route_next_to_dp = get_route_next_to_dp(html_str)
print(route_next_to_dp)

выходы

'B01J5FGW66'

по желанию.

Попробуйте это: он в основном использует регулярное выражение и подсчитывает следующие 10 строк и проверяет, найдено ли оно.

import re
my_string='<a class = "a-link-normal" href = "https://www.amazon.it/Philips-GC8735-PerfectCare-Generatore-Vapore/dp/B01J5FGW66/ref=gbph_img_s-3_7347_c3de3e94?smid=A11IL2PNWYJU7H&amp;pf_rd_p=82ae57d3-a26a-4d56-b221-3155eb797347&amp;pf_rd_s=slot-3&amp;pf_rd_t=701&amp;pf_rd_i=gb_main&amp;pf_rd_m=A11IL2PNWYJU7H&amp;pf_rd_r=MDQJBKEMGBX38XMPSHXB" id = "dealImage"></a>'
m = re.search(r"dp/([A-Za-z0-9]{10})/", my_string)
if m.group(1):
    print(m.group(1))

Другие вопросы по теме