【问题标题】:Regex for parsing uid from URL用于从 URL 解析 uid 的正则表达式
【发布时间】:2019-10-25 18:18:16
【问题描述】:

我正在尝试从 URL 中解析 UID。但是正则表达式不是我擅长的,所以寻求帮助。

示例输入: https://example.com/d/iazs9fEil/somethingelse?foo=bar

示例输出: iazs9fEil

到目前为止我尝试过的是

([/d/]+[\d\x])\w+

以某种方式起作用,但返回时带有 /d/ 前缀,因此输出为 /d/iazs9fEil

如何将正则表达式更改为不包含 /d/ 前缀?

编辑:

我试过这个正则表达式([^/d/]+[\d\x])\w+,它输出正确的字符串iazs9fEil,但也返回url的其余部分,所以这里是somethingelse?foo=bar

【问题讨论】:

  • re.search(r'/d/(\w+)', s).group(1)
  • @WiktorStribiżew 太棒了,按预期工作,谢谢!它在 regexr.com 中不起作用,但我猜它是 python 依赖项。在 python 中工作正常,所以没关系。随意将此作为答案,如果您愿意,我会接受。
  • 您需要使用其他人提到的组。只是一个提示,如果您要查找的内容始终在第 4 个正斜杠之后,您可以使用 string.split('/')[5] 我经常发现这比正则表达式更容易处理这类事情。
  • @Neil Spliting 是我目前的方法,我只是觉得正则表达式更健壮,因为这个 url 是由第三方应用程序 (Grafana) 生成的,我不负责更改。跨度>
  • 我想知道你在尝试你的正则表达式时是否有“不完整的转义\x”。

标签: python regex


【解决方案1】:

简而言之,你可以使用

match = re.search(r'/d/(\w+)', your_string)  # Look for a match
if match:                                    # Check if there is a match first
    print(match.group(1))                    # Now, get Group 1 value

查看regex demoregex graph

注意

  • / 不是任何特殊的元字符,不要在 Python 字符串模式中对其进行转义
  • ([/d/]+[\d\x])\w+ 匹配并捕获任何一个或多个斜杠或数字(参见[/d/]+,一个正字符类),然后是一个数字或(在这里,Python 显示错误:sre_contants.error incomplete escape \x,它可能会将其解析为x,但事实并非如此),然后匹配 1+ 个单词字符。您将/d/ 放入一个字符类中,它停止匹配字符序列[/d/]+ 匹配任何顺序和数量的斜线和数字,并且肯定将此字符串放入第 1 组。

【讨论】:

    【解决方案2】:

    试试(?<=/d/)[^/]+

    解释:

    (?<=/d/) - 积极向后看,确保前面是/d/

    [^/]+ - 匹配除/ 之外的一个或多个字符,因此它匹配直到/ 之前的所有字符

    Demo

    【讨论】:

    • 请不要转义/,它不是任何特殊的元字符。
    【解决方案3】:

    您可以使用捕获组:

    https?://.*?/d/([^/\s]+)
    

    Regex demo

    【讨论】:

    • 我认为您不必在开始时检查http。你认为http://d/1a2b3c4d5 是一个可能的输入吗?
    • @WiktorStribiżew Ha,这是一个公平的观点。你的答案是正确和最完整的。为你点赞。
    猜你喜欢
    • 2011-10-01
    • 1970-01-01
    • 2011-03-20
    • 2012-08-23
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多