2012-12-25 190 views
0

如何抓住以下字符串中的「加州」部分?Python最後一場比賽

http://states.com/_states/united_states/50/california 

我在嘗試以下,但不知道如何匹配最後一個/。

match = re.search(r'\/(.*)$', state_url) 
+0

@ IgnacioVazquez-Abrams:我確定他有。這是行不通的。 –

+0

您似乎在解析URI,爲什麼不使用此URI的路徑部分並獲取路徑的最後一個組件? – fge

回答

3

使用

r'[^/]*$' 

它匹配任何數量的字符,除了'/'輸入 或結束之前理想地,對於URL,

r'[^/#?]*(?:$|[#?])' 

它匹配任何數量的字符那在輸入末尾($)或路徑末尾的URL路徑部分中不是特殊的210。 (?:...)只是一個不包含內容的括號組。


順便說一句,的RFC 3986附錄B是用於正則表達式解析的URI有很大的參考。

附錄B.解析與正則表達式

URI引用作爲「第一匹配贏」的算法是相同的由POSIX正則表達式中使用的「貪婪」 消歧的方法,它是 使用正則表達式解析URI引用的潛在五個組成部分是很自然和常見的。

以下行是正確表達式,用於將 格式良好的URI引用分解爲其組件。

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 
    12   3 4   5  6 7  8 9 

...

+1

'r'\ /(。*?)$''將不起作用,原因很明顯。懶惰的量詞和一般的'''在這裏沒有地方。你的第一個正則表達式是有效的:http://regex101.com/r/cJ9fQ3(我會用'+'來代替'*') –

+0

@琳德里安,是的。我從來不記得哪個正則表達式引擎會進行PEG風格的回溯,哪些引擎會跟懶惰的運算符進行Prolog式回溯。只是爲了不依賴懶惰和渴望之間的差異,並使相鄰的正則表達式運算符毫不含糊。 –

5

你確定你需要的正則表達式?以下情況如何?

In [66]: url = 'http://states.com/_states/united_states/50/california' 

In [67]: url.split('/')[-1] 
Out[67]: 'california' 

但這取決於您是否總是想要提取URL中的最後一個單詞,當然。我只是想提到它。