2017-04-24 167 views
1

我試圖使用正則表達式來提取某些網址的特定部分,這些網址出現在不同的變體中。 這裏是通用的格式:使用正則表達式提取網址的一部分

http://www.blackpages.com/cityName-StateName/mip/part-I-want-to-extract/randomCharacters 

有時是 「MIP」 部分不存在,網址如下:

http://www.blackpages.com/cityName-StateName/part-I-want-to-extract/randomCharacters 

我開始寫以下RE:

re.compile("blackpages\.com/.*") 

.*匹配任何字符現在,當遇到「/」並在遇到下一個「/」之前提取所有後續內容時,我該如何停止?這會給我我想要提取的部分。

+0

拉克什,任何更多的關注?請隨時在我的答案下面放一行。 –

回答

1

你需要使用一個否定的字符類:

re.compile(r"blackpages\.com/([^/]*)") 
          ^^^^ 

[^/]*將匹配0+字符比/等,儘可能多的(貪婪)。

如果您期望在/之後至少有一個字符,請使用+量詞(1次或多次出現次數)而不是*

regex demo

Python code

import re 
rx = r"blackpages\.com/([^/]*)" 
ss = ["http://www.blackpages.com/cityName-StateName/mip/part-I-want-to-extract/randomCharacters", 
"http://www.blackpages.com/cityName-StateName/part-I-want-to-extract/randomCharacters"] 
for s in ss: 
    m = re.search(rx, s) 
    if m: 
     print(m.group(1)) 

輸出:

cityName-StateName 
cityName-StateName 
+0

您不應該使用捕獲組來提取該部分嗎? – Rahul

+0

我也加了組和代碼。 –