регулярное выражение для извлечения всех URL из строки типа dict - PullRequest
0 голосов
/ 25 апреля 2018

вот моя строка, из которой мне нужно извлечь URL

s = "'0352442':{url:'https://www.riteaid.com/shop/nexium-24hr-42-ct-capsules-0352442'},'0370009':{url:'https://www.riteaid.com/shop/rite-aid-pharmacy-epsom-salt-first-aid-6-lb-2-72-kg-0370009'},'0303249':{url:'https://www.riteaid.com/shop/huggies-natural-care-unscented-baby-wipes-soft-pack-56-count-0303249'},'0398568':{url:'https://www.riteaid.com/shop/rite-aid-sterile-pads-4-x4-25-ea-0398568'},}"

мой попытанный код до сих пор печатает только

urls = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', s)

, но печатает только повторениеэтого URL

    ['https://www.riteaid.com']

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Если вам нужно использовать регулярное выражение для вашего текущего примера, чтобы совпадать между {url:' и '}, вы можете использовать положительный lookbehind (?<= и положительный lookahead (?= и сопоставить URL, используя класс отрицательных символов [^']+, который не соответствует ' один или несколько раз.

(?<={url:')[^']+(?='})

Демо

Вы также можете быть менее строгими для ваших примеров данных и опустить ведущие { и конечные }:

(?<=url:')[^']+(?=')

0 голосов
/ 25 апреля 2018

Так как вы упомянули, что в строке есть что-то вроде dict, вы должны использовать регулярное выражение для вашего конкретного случая.

s = "'0352442':{url:'https://www.riteaid.com/shop/nexium-24hr-42-ct-capsules-0352442'},'0370009':{url:'https://www.riteaid.com/shop/rite-aid-pharmacy-epsom-salt-first-aid-6-lb-2-72-kg-0370009'},'0303249':{url:'https://www.riteaid.com/shop/huggies-natural-care-unscented-baby-wipes-soft-pack-56-count-0303249'},'0398568':{url:'https://www.riteaid.com/shop/rite-aid-sterile-pads-4-x4-25-ea-0398568'},}"

urls = re.findall(r"url:'(https?://.*?)'}", s)

result:
['https://www.riteaid.com/shop/nexium-24hr-42-ct-capsules-0352442',
 'https://www.riteaid.com/shop/rite-aid-pharmacy-epsom-salt-first-aid-6-lb-2-72-kg-0370009',
 'https://www.riteaid.com/shop/huggies-natural-care-unscented-baby-wipes-soft-pack-56-count-0303249',
 'https://www.riteaid.com/shop/rite-aid-sterile-pads-4-x4-25-ea-0398568']

Пояснение

url: '(http : буквенная строка

s? : необязательный буквенный символ "s"

. *? : не жадный любойсимвол.

'}: : буквенная строка

...