2015-07-12 28 views
0

我寫使用Scrapy,結果我得到這樣一組URL的網絡爬蟲外檢查字符串表達式:虛擬的URL] * http://matrix.com/en/Zion定期爲一組

http://matrix.com/en/Machine_World

http://matrix.com/en/Matrix:Banner_guidelines

http://matrix.com/en/File:Link_Banner.jpg

http://matrix.com/wiki/en/index.php *

在scrapy中的規則中,我想添加一個正則表達式,它允許只有類型爲「http://matrix.com/en/Machine_World」或「http://matrix.com/en/Zion」 的網址,即包含集合之外任何內容的網址「http://matrix.com/en/ < [a-zA-Z,_]> 「一定不能被允許。

約束:

  • 後的字符串 「/ EN /」 可以是任何長度。所以我不能要求它只查看前10或20個字符。例如,當我使用正則表達式:[a-zA-Z,] {1,20}或者[a-zA-Z,] {1,}它仍然匹配像http://matrix.com/en/Matrix:Banner_guidelines那樣的URL,它會找到「http://matrix.com/en/Matrix」部分該網址成功匹配。我希望它查看在「/ en /」之後直到URL結尾的字符串,然後應用此規則。 不幸的是我不能提取那個字符串n寫一個任何類型的子程序。它只能使用正則表達式來完成!
+3

'http://matrix.com/en/ [a-zA-Z,_] + $'? – NightShadeQueen

+0

'$'匹配「行尾」 – NightShadeQueen

+0

給出的示例的預期輸出是什麼? –

回答

1

即包含 「http://matrix.com/en/ < [A-ZA-Z,_]>」 不能被允許的組的之外的任何內容的URL。

您是否嘗試過在正則表達式中使用這個字符類?看起來你不包括下劃線。

嘗試

[a-zA-Z,_]+ 

加號的意思是「一個或多個」 - 這是一樣的{1,}只是一個不錯的簡寫:)

如果你想排除與.PHP項目或.jpg,隨意$符號添加到末尾,像這樣:

[a-zA-Z,_]+$ 

$表示「行尾」,這意味着您匹配的序列必須運行到該行的末尾。由於fullstops沒有在字符類包括在內,這些選項將被排除在外

讓我知道如果這樣的作品, 埃利奧特

+0

添加「+」會給出與使用長度{1,20}或{1,}相同的結果} – LeoNeo

+0

我不明白你的意思是「看起來你不包括下劃線」。表達我想要的成功輸出的另一種方式是格式http://matrix.com/en/ 或http://matrix.com/en/ 的URL(僅使用駱駝案例,真正的o/p不關心大小寫) – LeoNeo

+0

「如果你想排除帶有.php或.jpg的項目,可以在結尾添加一個$符號」正則表達式應該注意這一點,因爲它允許的只有az,AZ和_。所以如果遇到任何其他角色,它將自動被取消資格。或者我假設。 – LeoNeo

0

重現的證據,建議的正則表達式的工作原理:

grep("matrix.com\\/en\\/[a-zA-Z,_]+$", x, perl=TRUE, value=TRUE) 
#[1] "http://matrix.com/en/Zion"   
#[2] "http://matrix.com/en/Machine_World" 

數據

x <- c("http://matrix.com/en/Zion", "http://matrix.com/en/Machine_World", 
     "http://matrix.com/en/Matrix:Banner_guidelines", 
     "http://matrix.com/en/File:Link_Banner.jpg", 
     "http://matrix.com/wiki/en/index.php") 
+1

是的,這似乎工作。我正在使用在線工具來驗證答案,但我猜這個工具很麻煩。但是「[a-zA-Z,_] + $」似乎可以做到這一點! – LeoNeo

+0

樂意幫忙:) –