使用正则表达式时得到不正确的匹配

Getting incorrect match while using regular expressions

我正在尝试查找 link 的末尾是否包含“.pdf”。

我在正则表达式中使用 [/w/-]+ 跳过“.pdf”之前的所有字符,然后查看它是否包含“.pdf”。我是正则表达式的新手。

密码是:

import urllib2
import json
import re
from bs4 import BeautifulSoup
url = "http://codex.cs.yale.edu/avi/os-book/OS8/os8c/slide-dir/"
response = urllib2.urlopen(url)
soup = BeautifulSoup(response.read())
links = soup.find_all('a')
for link in links:
    name = link.get("href")
    if(re.match(r'[\w/.-]+.pdf',name)):
        print name

我想将姓名与以下 link 类型匹配:

PDF-dir/ch1.pdf

我对你的代码做了一点小改动

for link in links:
name = link.get("href")
if(re.search(r'\.pdf$',name)):
    print name

输出如下:

PDF-dir/ch1.pdf
PDF-dir/ch2.pdf
PDF-dir/ch3.pdf
PDF-dir/ch4.pdf
PDF-dir/ch5.pdf
PDF-dir/ch6.pdf
PDF-dir/ch7.pdf
PDF-dir/ch8.pdf
PDF-dir/ch9.pdf
PDF-dir/ch10.pdf
PDF-dir/ch11.pdf
PDF-dir/ch12.pdf
PDF-dir/ch13.pdf
PDF-dir/ch14.pdf
PDF-dir/ch15.pdf
PDF-dir/ch16.pdf
PDF-dir/ch17.pdf
PDF-dir/ch18.pdf
PDF-dir/ch19.pdf
PDF-dir/ch20.pdf
PDF-dir/ch21.pdf
PDF-dir/ch22.pdf
PDF-dir/appA.pdf
PDF-dir/appC.pdf

您不需要正则表达式。使用 CSS selector 检查 href 是否以 pdf:

结尾
for link in soup.select("a[href$=pdf]"):
    print(link["href"])