簡體   English   中英

如何從被屏蔽的Python字符串中提取子字符串?

[英]How to extract substrings from a masked Python string?

我正在編寫具有直觀路由的HTTP請求處理程序。 我的目標是能夠將裝飾器應用於一個函數,該函數聲明正在使用的HTTP方法以及執行裝飾函數的偵聽路徑。 這是此實現的示例:

@route_handler("GET", "/personnel")
def retrievePersonnel():
    return personnelDB.retrieveAll()

但是,我也希望能夠向路徑添加變量。 例如, /personnel/3將獲取ID為3的人員。我要執行此操作的方法是為傳遞到route_handler的路徑提供一種“變量掩碼”。 一個新的例子是:

@route_handler("GET", "/personnel/{ID}")
def retrievePersonnelByID(ID):
    return personnelDB.retrieveByID(ID)

裝飾者的目的是將路徑文字(例如/personnel/3 )與路徑“ mask”( /personnel/{ID} )進行比較,並將3傳遞給裝飾函數。 我假設解決方案是比較兩個字符串,保留差異,並將文字中的差異放入以掩碼中的差異命名的變量中(減去花括號)。 但是然后,我還必須檢查文字是否匹配掩碼,減去{}變量捕獲器...


tl; dr-有沒有辦法

stringMask("/personnel/{ID}", "/personnel/5") -> True, {"ID": 5}

stringMask("/personnel/{ID}", "/flowers/5") -> False, {}

stringMask("/personnel/{ID}", "/personnel") -> False, {}

因為我猜想真的沒有一個簡單的解決方案,所以我將發布我所做的解決方案。 我本來希望可以在幾行中做點什么,但是哦¯_(ツ)_ /¯

def checkPath(self, mask):
    mask_parts = mask[1:].split("/")
    path_parts = self.path[1:].rstrip("/").split("/")
    if len(mask_parts) != len(path_parts):
        self.urlVars = {}
        return False

    vars = {}
    for i in range(len(mask_parts)):
        if mask_parts[i][0] == "{":
            vars[mask_parts[i][1:-1]] = path_parts[i]
        else:
            if mask_parts[i] != path_parts[i]:
                self.urlVars = {}
                return False

    self.url_vars = vars # save extracted variables
    return True

掩碼只是一個字符串,類似於下面的字符串之一:

/resource
/resource/{ID}
/group/{name}/resource/{ID}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM