【问题标题】:compare url with a customized pattern in python将 url 与 python 中的自定义模式进行比较
【发布时间】:2016-06-09 19:48:23
【问题描述】:

当我在网站上抓取文章 url 并获取所有 <a> 标签并获取所有 href 属性时,此 url 列表有一些链接不是文章的链接,而是指向其他类别或同一域内任何其他页面的链接,所以我需要做到以下几点:

为 url 创建一个模式并将链接列表中的每个 url 匹配到这个模式,这样我就可以知道这个 url 是不是文章 url

模式示例如下:

链接:“http://www.cnbc.com/2016/03/13/financial-times-china-rebuts-economy-doomsayers-on-debt-and.html

模式匹配:http://www.cnbc.com/(*)/(*)/(*)/(*).html

所以用 (*) 替换链接的任何可变部分的想法

问题是如何将链接匹配到模式?

【问题讨论】:

  • 使用[^/]+而不是*,并转义点。
  • 前三个(*) 部分是数字,因此您可以使用[0-9]+。最后一个(*)部分是字母和符号的组合,所以你可以使用.+
  • 我为非程序员的用户制作了这个模式,因此他们无法将 url 转换为正则表达式,这只是示例,它可用于任何网站
  • 你有什么代码,你试过什么?

标签: python regex


【解决方案1】:

正则表达式 (regex) 匹配

您可以使用regex match 来完成此操作。

import re

# Example url
url = 'http://www.cnbc.com/2016/03/13/financial-times-china-rebuts-economy-doomsayers-on-debt-and.html'
# Create a regex match pattern
pattern = r'http://www.cnbc.com/(.+)/(.+)/(.+)/(.+).html'
# Find match
m = re.match(pattern, url)
# Get Groups
m.groups()

('2016',
 '03',
 '13',
 'financial-times-china-rebuts-economy-doomsayers-on-debt-and')

【讨论】:

  • 您应该考虑将* 替换为+,因为在/ 分隔符中不匹配任何内容实际上没有意义。
  • 它工作得很好,我也可以使用带有数字的 "\d" 而不是 (.*) ,谢谢
猜你喜欢
  • 2018-09-12
  • 2016-02-12
  • 2022-10-01
  • 1970-01-01
  • 2016-07-10
  • 2015-10-23
  • 1970-01-01
  • 2012-05-03
  • 2013-10-19
相关资源
最近更新 更多