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

2024-10-01 19:15:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个具有直观路由的HTTP请求处理程序。我的目标是能够将decorator应用于一个函数,该函数声明正在使用的HTTP方法以及执行修饰函数时要监听的路径。以下是此实现的示例:

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

但是,我还希望能够向路径添加变量。例如,/personnel/3将获取ID为3的人员。我要做的是为传递到route_处理程序的路径提供一种“变量掩码”。一个新的例子是:

^{pr2}$

decorator的目的是将路径文本(例如,/personnel/3)与路径“mask”(/personnel/{ID})进行比较,并将3传递到修饰函数中。我假设解决方案是比较两个字符串,保留差异,并将文本中的差异放入一个以掩码中的差异(减去大括号)命名的变量中。但是我还要检查文本是否与掩码减去{}变量捕捉器匹配。。。在


D.-有没有办法做

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

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

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


Tags: 函数文本路径idfalsehttp处理程序路由
1条回答
网友
1楼 · 发布于 2024-10-01 19:15:00

既然我猜这并不是一个简单的解决方案,我就把我的解决方案贴出来。我本来希望我能在几行诗里做点什么,但是哦,好吧‘’

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

掩码只是一个字符串,类似于下面的其中一个:

^{pr2}$

相关问题 更多 >

    热门问题