Python 使用正则表达式时获取不正确的匹配

Python 使用正则表达式时获取不正确的匹配,python,regex,beautifulsoup,html-parsing,Python,Regex,Beautifulsoup,Html Parsing,我试图找到一个链接是否在其末尾包含“.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(u

我试图找到一个链接是否在其末尾包含“.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
我想将名称与以下类型的链接匹配:

PDF目录/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目录/ch15.PDF
PDF dir/ch16.PDF
PDF dir/ch17.PDF
PDF dir/ch18.PDF
PDF dir/ch19.PDF
PDF目录/ch20.PDF
PDF dir/ch21.PDF
PDF dir/ch22.PDF
PDF目录/appA.PDF
PDF目录/appC.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目录/ch15.PDF
PDF dir/ch16.PDF
PDF dir/ch17.PDF
PDF dir/ch18.PDF
PDF dir/ch19.PDF
PDF目录/ch20.PDF
PDF dir/ch21.PDF
PDF dir/ch22.PDF
PDF目录/appA.PDF
PDF目录/appC.PDF


你不需要正则表达式。使用a检查
href
是否以
pdf
结尾:


你不需要正则表达式。使用a检查
href
是否以
pdf
结尾:



您认为
[/b/-]+
有什么作用?您希望所有结果都包含“.pdf”还是只包含一个。如果您想要全部,也许您应该使用搜索而不是匹配。它匹配[a-zA-Z0-9\/-]的一个或多个事件。您是否尝试了“.pdf”?好的,那么,为什么不使用类似于
re.search(r'[\w-]+/[\w-]+\.pdf$”,name)
?您认为
[/b/-]+
的模式?您希望所有结果都包含“.pdf”还是只包含一个。如果您想要全部,也许您应该使用搜索而不是匹配。它匹配一个或多个[a-zA-Z0-9\/-]的出现。您是否只尝试了“.pdf”?好的,那么,为什么不使用类似
re.search(r'[\w-]+/[\w-]+\.pdf$”,name)
?因为他最后只想要“.pdf”,最好这样做:如果(re.search(r'\.pdf$,name))这段代码有效。但是我在问为什么我的原始代码不起作用?请参考此链接,
re.search()
re.match()
@ShivamMitra基本上是
re.match()
尝试匹配字符串开头的模式
re.search()
尝试在整个字符串中匹配模式,直到找到匹配项。由于他只希望在末尾使用“.pdf”,因此最好执行以下操作:if(re.search(r'\.pdf$”,name))此代码有效。但是我在问为什么我的原始代码不起作用?请参考此链接,
re.search()
re.match()
@ShivamMitra基本上是
re.match()
尝试匹配字符串开头的模式
re.search()
尝试在整个字符串中匹配模式,直到找到匹配为止。