【问题标题】:regex for extracting all urls from dict like string用于从 dict 中提取所有 url 的正则表达式,如字符串
【发布时间】:2018-04-25 10:02:25
【问题描述】:

这是我必须从中提取网址的字符串

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']

【问题讨论】:

  • 可以使用json解析dict。
  • 我必须使用正则表达式进行解析,这是强制性的,需要正则表达式专家的帮助

标签: python regex python-3.x python-2.7 list-comprehension


【解决方案1】:

正如您提到的 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”

.*?:不贪心任何字符。

'}::文字字符串

【讨论】:

  • 得到了比xxx
  • 如果这解决了您的问题,您可以接受答案。
【解决方案2】:

如果您必须为当前示例使用正则表达式以匹配 {url:' 和 '},您可以使用正则 lookbehind (?<= 和正前瞻 (?= 并使用否定字符类匹配 url [^']+ 不匹配 ' 一次或多次。

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

Demo

您还可以减少对示例数据的限制,省略前导 { 和尾随 }:

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

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 2011-07-24
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多