Python Reg Pattern URL选择/过滤

时间:2017-03-12 07:53:15

标签: python regex

links = [
    'http://www.npr.org/sections/thesalt/2017/03/10/519650091/falling-stars-negative-yelp-reviews-target-trump-restaurants-hotels',
    'https://ondemand.npr.org/anon.npr-mp3/npr/wesat/2017/03/20170311_wesat_south_korea_wrap.mp3?orgId=1&topicId=1125&d=195&p=7&story=519807707&t=progseg&e=519805215&seg=12&siteplayer=true&dl=1',
    'https://www.facebook.com/NPR',
    'https://www.twitter.com/NPR']

目标:获取包含(/ yyyy / mm / dd / ddddddddd /)格式的链接。例如/ 2017/03 /519650091分之10/

由于某些原因无法做到正确,总是有facebook,twitter和2017/03/20170311格式的链接。

sel_links = []
def selectedLinks(links):
    r = re.compile("^(/[0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]{9})$")
    for link in links:
        if r.search(link)!="None":
            sel_links.append(link)
    return set(sel_links)
selectedLinks(links)

1 个答案:

答案 0 :(得分:1)

这里有几个问题:

  1. 模式^(/[0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]{9})$要求字符串以/[0-9]{4}/开头,但所有字符串都以http开头。
  2. 条件r.search(link)!="None"永远不会成立,因为re.search会返回None或匹配对象,因此与字符串"None"进行比较是不合适的
  3. 看来你正在寻找这个:

    def selectedLinks(links):
        r = re.compile(r"/[0-9]{4}/[0-9]{2}/[0-9]{2}/[0-9]{9}")
        for link in links:
            if r.search(link):
                sel_links.append(link)
        return set(sel_links)