在python中的一个re.compile语句中排除/包含字符串以提取感兴趣的URL

时间:2018-09-07 21:24:30

标签: python regex beautifulsoup

因此,我正在尝试获取包含特定字符串的url,同时也避免使用包含错误字符串的url。

因此,我不希望任何包含字符串“ / inventory / all /”的网址,而只希望包含字符串“ / inventory /”或“ / inventory / 2017 /”的网址

因此,我设法通过以下方式至少排除了包含“ / inventory / all /”的字符串的网址:

get_urls = soup.findAll('a', href=re.compile('^(?!.*/inventory/all/).*$'))

但是当我尝试包含我想要获取的字符串时,它不再起作用,我尝试了:

get_urls = soup.findAll('a', href=re.compile('^(?!.*/inventory/all/).*$'|/inventories/|/inventory/2017/'))

感谢您的帮助,我是新手

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

^(?=.*inventor(?:ies|y/2017))^(?:(?!inventory/all).)+$
  • ^(?=.*inventor(?:ies|y/2017))这是一项前瞻性工作,可确保我们仅在查找带有inventoriesinventory/2017的字符串。为了减少回溯,您需要锚定它,即^,它表明匹配应该从句子的开头开始。因此,只做^.*inventor(?:ies|y/2017).*$就足够了,因为选择的唯一两个就是这两个。

  • ^(?:(?!inventory/all).)+$这部分是对前面的否定看法,它断言从字符串的开头到字符串的末尾没有inverntory/all。我添加了这一部分,以防您发现格式为inventoy/2017/inventory/all的字符串。