gpt4 book ai didi

python - 从 werkzeug/Flask 路由规则中捕获类型和/或参数化路径的规则

转载 作者:太空宇宙 更新时间:2023-11-04 03:20:53 25 4
gpt4 key购买 nike

我有一组 Flask 路由

/<string:name>/<path:id>/
/<name>/<path:id>/
/<string:name>/<id>/

我想使用正则表达式来提取nameid

/{name}/{id}/
/{name}/{id}/
/{name}/{id}/

对于所有这些(一个正则表达式来统治它们),为具有 type:path 的路径工作,如 /<string:name>/还有那些没有类型的 /<name>/

但我正在尝试:

(<(.*?\:)?(.*?)>)

只能匹配

/{name}/{id}/
/{id}/ # <--- Why this is not matching /{name}/{id}/
/{name}/{id}/

有 REGEX 专家帮忙吗?

在线正则表达式:https://regex101.com/r/iL3jK2/3
问题:https://github.com/rochacbruno/flasgger/issues/10

最佳答案

我建议使用

(<([^<>]*:)?([^<>]*)>)

regex demo is here .不确定您是否真的需要外部 (...) (仅当您将它与 re.findall 一起使用时,但您可以删除它们并使用 re.finditer 并使用 match.group(0) 访问所有匹配项)。

解释:

  • <([^<>]*:)? - 可选的第 2 组匹配
    • < - 文字 <
    • [^<>]* - 除 < 以外的零个或多个字符和 >
    • : - 文字 :
  • ([^<>]*) - 第 3 组匹配除 < 以外的零个或多个字符和 >
  • >关闭>

您的模式相当贪婪 .*?匹配尽可能多的字符以到达第一个 : .因此,它直接进入 id。忽略name .使用否定字符类[^<>] , 我们确定我们不会通过 >并匹配name在第一对 <...> 里面.

关于python - 从 werkzeug/Flask 路由规则中捕获类型和/或参数化路径的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34777613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com