Python 从url提取uuid

Python 从url提取uuid,python,regex,Python,Regex,我想从URL中提取UUID 例如: /posts/eb8c6d25-8784-4cdf-b016-4d8f6df64a62?mc_cid=37387dcb5f&mc_eid=787BBECB2 /posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034 /posts/5ff0021c-16cd-4f66-8881-ee28197ed1cf 我有几千根这样的绳子 我的正则表达式现在是“*\/posts\/(.*)[/?]+.*” 这给了我这样的结果:

我想从URL中提取UUID

例如:

/posts/eb8c6d25-8784-4cdf-b016-4d8f6df64a62?mc_cid=37387dcb5f&mc_eid=787BBECB2
/posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034
/posts/5ff0021c-16cd-4f66-8881-ee28197ed1cf

我有几千根这样的绳子

我的正则表达式现在是
“*\/posts\/(.*)[/?]+.*”
这给了我这样的结果:

d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid
84ba0472-926d-4f50-b3c6-46376b2fe9de/uid
6f3c97c1-b877-40e0-9479-6bdb826b7b8f/uid
f5e5dc6a-f42b-47d1-8ab1-6AE53415D24
f5e5dc6a-f42b-47d1-8ab1-6AE53415D24
f7842dce-73a3-4984-bbb0-21d7ebce1749
fdc6c48f-b124-447d-b4fc-bb528abb8e24

正如您所看到的,我的正则表达式无法摆脱
/uid
,但可以处理
?xxxx
,查询参数,很好

我错过了什么?如何使它正确


谢谢

对于UUID来说,
*
模式太宽太贪婪了:

>>> import re
>>> data = """
... /posts/eb8c6d25-8784-4cdf-b016-4d8f6df64a62?mc_cid=37387dcb5f&mc_eid=787bbeceb2
... /posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034
... /posts/5ff0021c-16cd-4f66-8881-ee28197ed1cf
... """
>>> 
>>> re.findall(r"/posts/([A-Za-z0-9\-]+)", data)
['eb8c6d25-8784-4cdf-b016-4d8f6df64a62', 
 'd78fa5da-4cbb-43b5-9fae-2b5c86f883cb', 
 '5ff0021c-16cd-4f66-8881-ee28197ed1cf']
或者,您可以对UUID格式更加严格,请参阅更多:


对于UUID来说,
*
模式过于宽泛和贪婪:

>>> import re
>>> data = """
... /posts/eb8c6d25-8784-4cdf-b016-4d8f6df64a62?mc_cid=37387dcb5f&mc_eid=787bbeceb2
... /posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034
... /posts/5ff0021c-16cd-4f66-8881-ee28197ed1cf
... """
>>> 
>>> re.findall(r"/posts/([A-Za-z0-9\-]+)", data)
['eb8c6d25-8784-4cdf-b016-4d8f6df64a62', 
 'd78fa5da-4cbb-43b5-9fae-2b5c86f883cb', 
 '5ff0021c-16cd-4f66-8881-ee28197ed1cf']
或者,您可以对UUID格式更加严格,请参阅更多:


    • 正则表达式尝试匹配尽可能多的字符(非正式地称为“maximal munch”)

      您的正则表达式
      */posts\/(.*)[/?]+.
      的简单英文描述如下:

      匹配任意项,后跟
      /posts/
      ,后跟任意项,后跟一个或多个
      /?
      ,后跟任意项

      当我们将该正则表达式应用于此文本时:

      ../posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034

      。。。最大munch规则要求第二个“任意”匹配项尽可能长,因此它最终匹配的内容比您想要的要多:

      d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid

      。。。因为仍然有
      /7034
      部分剩余,它与正则表达式的剩余部分相匹配


      修复此问题的最佳方法是使用只匹配UID中实际出现的字符的正则表达式(如@alecxe所建议的)。

      正则表达式尝试匹配尽可能多的字符(非正式称为“maximal munch”)

      您的正则表达式
      */posts\/(.*)[/?]+.
      的简单英文描述如下:

      匹配任意项,后跟
      /posts/
      ,后跟任意项,后跟一个或多个
      /?
      ,后跟任意项

      当我们将该正则表达式应用于此文本时:

      ../posts/d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid/7034

      。。。最大munch规则要求第二个“任意”匹配项尽可能长,因此它最终匹配的内容比您想要的要多:

      d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid

      。。。因为仍然有
      /7034
      部分剩余,它与正则表达式的剩余部分相匹配


      修复此问题的最佳方法是使用只匹配UID中实际出现的字符的正则表达式(如@alecxe所建议的)。

      您是否先尝试过搜索?还有好的指针。我搜索了错误的关键字@fukanchikDid您先尝试搜索吗?还有好的指针。我搜索了错误的关键字@福康奇克