2011-03-23 49 views
0

我有一個URL列表,每個URL都與一組數字相關聯。例如:一種分組URL的方法

http://example.com/ - 0 
http://example.com/login/ - 1 
http://example.com/login/verify/ - 2 
http://example.com/user123/home/ - 3 
http://example.com/user254/home/ - 3 
http://example.com/user123/edit/ - 4 

我想一些方法來「壓縮」這一點,也許使用正則表達式 - 美中不足的是,所有的URL列表中沒有我可以假設它們映射到任何數字我想要的。

因此,像這樣的輸出 - 根據每個表達式按照的順序檢查任何URL,並根據第一個匹配給出一個數字。

http://example.com/login/verify* - 2 
http://example.com/login/* - 1 
http://example.com/*/home/ - 3 
http://example.com/*/edit - 4 
http://example.com/* - 0 

注:有這樣的多個可能的輸出是可接受的。此外,我認爲像樹一樣,每個節點包含一個像上面的表達式之一的表達式,最後的葉子是要檢查的實際URL。

另一個說明,我說爲簡單起見映射到數字。實際上,它們被映射到一組數字,該組必須匹配。只是爲了幫助某人提出解決方案(儘管我懷疑它)。

回答

0

它看起來像對每個URL匹配使用不同的正則表達式最簡單,它們可能看起來像這樣。

http://example\.com/login/verify 
http://example\.com/login 
http://example\.com/[^/]+/home 
http://example\.com/[^/]+/edit 
http://example\.com 

嘗試按順序匹配URL中的每一個,然後匹配時查找與該匹配對應的數字(或集合)。

另外,您可以使用一個單一的正則表達式與捕獲組,以確定哪些URL實際上是匹配的,例如:

http://example\.com(?:(/login/verify)|(/login)|(/[^/]+/home)|(/[^/]+/edit))? 

這裏是一個Rubular,告訴您如何可以使用以前的正則表達式: http://www.rubular.com/r/tklqMs8U1Z

編輯:這是一個Python函數,它可以完成我認爲您正在尋找的任務。

import re 

def url_match(url): 
    base = "http://example.com" 
    endings = [("/login/verify", 2), ("/login", 1), ("/*/home", 3), ("/*/edit", 4), ("", 0)] 
    re_endings = ["(%s)" % re.escape(x[0]).replace(r"\*", "[^/]+") for x in endings] 

    pattern = re.compile("%s(?:%s)" % (re.escape(base), "|".join(re_endings))) 
    match = pattern.match(url) 

    if match is None: 
     return None 

    index = [i for i, x in enumerate(match.groups()) if x is not None] 
    return endings[index[0]][1] 

url_match("http://example.com")    # 0 
url_match("http://example.com/login")  # 1 
url_match("http://example.com/login/verify") # 2 
url_match("http://example.com/user123/home") # 3 
url_match("http://example.com/user123/edit") # 4 
url_match("http://sample.com")    # None 
+0

但我擁有的URL號碼對的列表是動態生成的,所以我需要一種自動的方式來生成分組。 – Vanwaril 2011-03-23 17:06:46

+0

如果您需要的不僅僅是您給出的示例的正則表達式,它將有助於瞭解這是什麼語言。 – 2011-03-23 18:03:28

+0

我沒有被鎖定到任何語言,這將是一個獨立的實用程序,通過消息與我的系統的其餘部分進行交互。 – Vanwaril 2011-03-23 18:21:50

0

你要求的是基於webpath的URL聚類。您可以檢出文本文檔的K-means聚類。它確實詳細解釋了這一點。

+0

我試着看過幾個K-means論文,但我沒有找到適合這個的東西。你能提供一個更具體的解決方案,或者可能是一個鏈接? – Vanwaril 2011-07-22 16:30:27

相關問題