Как я могу получить буквы в выражении на Python - PullRequest
0 голосов
/ 07 сентября 2018

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

<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)

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

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Я предполагаю, что вы всегда просто хотите, чтобы между слешами рядом с 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'

по желанию.

0 голосов
/ 07 сентября 2018

Попробуйте это: он в основном использует регулярное выражение и подсчитывает следующие 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))
0 голосов
/ 07 сентября 2018

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

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...