2015-11-06 36 views
2

你好,我是一個新手,目前正試圖學習各種模式的實驗正則表達式模式。我試圖爲這個url創建正則表達式模式,但失敗了。這是亞馬遜的分頁鏈接。如何申請條件正則表達式

http://www.amazon.in/s/lp_6563520031_pg_2?rh=n%3A5866078031%2Cn%3A%215866079031%2Cn%3A6563520031&page=2s&ie=UTF8&qid=1446802571

或者

http://www.amazon.in/Tena-Wet-Wipe-Pulls-White/dp/B001O1G242/ref=sr_1_46?s=industrial&ie=UTF8&qid=1446802608&sr=1-46

我只想只有這兩樣東西查詢的網址。

  1. 如果url具有DP目錄或產品目錄

  2. 如果url具有任何數字

我試圖創建正則表達式模式,但查詢字符串頁失敗。 我希望如果第一件事不在那裏,正則表達式模式應該匹配第二個(反之亦然)

這裏的正則表達式我做:

.*\/(dp|product)\/ | .*page 

這裏是我的regex101鏈接:https://regex101.com/r/zD2gP5/1#python

+1

你能解釋一下這些**三種語言**標籤嗎? JavaScript或PHP或Python? –

+0

@KevinGuan哦,對不起,我認爲那裏的人可能知道正則表達式。我應該刪除它們嗎? –

+0

如果你只想檢查,爲什麼匹配整個輸入?只需檢查['\ /(?:dp | product)\/| [&?] page ='](https://regex101.com/r/uQ8xZ9/1)。 –

回答

3

既然你只是想檢查,如果一個字符串包含一些模式,您可以使用

\/(?:dp|product)\/|[&?]page= 

請參閱regex demo

在Python,只檢查與re.search

import re 
p = re.compile(r'/(?:dp|product)/|[&?]page=') 
test_str = "http://w...content-available-to-author-only...n.in/s/lp_6563520031_pg_2?rh=n%3A5866078031%2Cn%3A%215866079031%2Cn%3A6563520031&page=2s&ie=UTF8&qid=14468025716" 
if p.search(test_str): 
    print ("Found!") 

此外,在Python正則表達式的模式,也沒有必要逃避/斜槓。

正則表達式匹配兩個替代子模式(\/(?:dp|product)\/[&?]page=):

  • / - 正斜槓
  • (?:dp|product) - 要麼dpproduct(而不存儲捕捉緩衝區內的捕獲,因爲它是一個 - 捕獲組)
  • / - 斜槓
  • | - 或...
  • [&?] - 無論是&?(我們檢查查詢字符串參數的開始)
  • page= - 符號page=的字面順序。
2
\/(dp|product)\/|page=(?=[^&]*\d)[^&]+ 

這將是我的想法,請測試,並讓我知道如果您有問題。

+0

誤差小... 。剛修好了 –

+0

錯誤是什麼? – zolo

+0

嘗試運行這一個regex101.com。您以前的查詢/(dp | product)/ | page =(?= [^&] * \ d)[^&] +。你忘了逃避斜線。但是,謝謝 –