python - 从url中提取uuid

标签 python regex

我想从网址中提取 UUID。

例如:

/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

我有数千个这种字符串。

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

d78fa5da-4cbb-43b5-9fae-2b5c86f883cb/uid
84ba0472-926d-4f50-b3c6-46376b2fe9de/uid
6f3c97c1-b877-40e0-9479-6bdb826b7b8f/uid
f5e5dc6a-f42b-47d1-8ab1-6ae533415d24
f5e5dc6a-f42b-47d1-8ab1-6ae533415d24
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格式更严格,查看更多:

关于python - 从url中提取uuid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310576/

相关文章:

regex - perl 删除连续的重复行

python - Tkinter/Python Treeview 更改 header

python - 高效存储的字典。这个数据结构是否存在,它叫什么?

python - ReportLab 无法在 Azure Python 网站上运行

c# - 前面不能有数字的子字符串的正则表达式

javascript - javascript 中正则表达式的歧义

java - 如何将字符串拆分为字符串流?

javascript - 在 Javascript 中用正则表达式替换竖线和逗号

python - 比较张量中相等元素的数量

python - Unicode 正在重新编码