2014-03-31 40 views
0

我在Python中處理正則表達式的邏輯時遇到了一些麻煩。我想寫一個正則表達式不是如果字符串以子字符串結尾,則返回匹配。最終,我試圖排除任何鏈接到我在屬性<a>標籤中找到的二進制文件。 (這是在Scrapy正在實施)正則表達式,負面回顧,預防匹配

我的問題是,如果我的正則表達式是[^ \t\n\r\f\v]+[\/]?(?<!.pdf),它會找出鏈接someDocument.pdf返回someDocument.pd

如何從如果它發現,在所有返回任何比賽預防串?

+0

「如果字符串以子字符串結尾」:不是this * always * true?字符串的所有部分都是子字符串,包括「結尾」。 –

+0

@Asad我認爲他的意思是「如果一個字符串以某個子串結尾」 –

+0

@AdamSmith啊,我明白了,謝謝。 @OP所以,爲了澄清,你是否在尋找不以'.pdf'結尾的字符串?如果是這樣,你可以否定測試'^。* \。pdf $'的字符串的結果。 –

回答

0

如果從scrapy使用,那麼你可能需要在你的正則表達式的末尾添加$

[^ \t\n\r\f\v]+[\/]?(?<!\.pdf)$ 

如果有任何方式使用BeautifulSoup從您的項目,那就試試吧:

htmls = '''<a href="adssad/asdasd/asd.pdf">M</a> <a href='asdasdasdas/asdasd/asdasd.doc'></a>''' 
soup = BeautifulSoup(htmls) 
for link in soup.findAll("a", {"href":re.compile("(?<!\.pdf)$")}): 
    print link['href']