You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arch Linux软件包名称拆分:提取包名与版本信息的正则表达式求助

Arch Linux软件包名称拆分:提取包名与版本信息的正则表达式求助

嘿,我刚好碰到过类似的Arch包名解析问题,看了你给的示例和需求,其实核心是要精准找到最后两个连字符分隔的部分作为版本+发布号,前面的全部保留为包名——毕竟Arch包名的格式本质是[包名]-[版本]-[发布号],但包名里可能包含连字符(比如networkmanager-qt5、python-urllib3这种),所以不能简单按第一个或某个位置的连字符拆分。

你一开始尝试的(.*\D)-(.*)确实有局限,比如碰到purpose5这种包名末尾带数字的情况,会错误地把purpose当成包名,5-5.113.0-1当成版本部分,显然不符合预期。

不过你后来想到的(.*)-(.*-.*)其实刚好命中了核心逻辑!这个正则的思路非常巧妙:

  • 第一个捕获组(.*):匹配所有内容,直到遇到最后一个能让后面的(.*-.*)成立的位置——也就是倒数第二个连字符之前的所有内容,这正好是我们需要的完整包名
  • 第二个捕获组(.*-.*):匹配从倒数第二个连字符开始到结尾的部分,也就是[版本]-[发布号]的组合,完全符合你要把版本和发布号放在一起的需求

我们拿你的测试数据逐个验证,结果完全符合预期:

webkit2gtk-4.1-docs-2.42.5-1 → webkit2gtk-4.1-docs  2.42.5-1
webkit2gtk-4.1-2.42.5-1 → webkit2gtk-4.1  2.42.5-1
libyuv-r2426+464c51a0-1 → libyuv  r2426+464c51a0-1
networkmanager-qt5-5.113.0-1 → networkmanager-qt5  5.113.0-1
portaudio-1:19.7.0-2 → portaudio  1:19.7.0-2
purpose5-5.113.0-1 → purpose5  5.113.0-1
python-urllib3-1.26.18-1 → python-urllib3  1.26.18-1
ttf-meslo-nerd-font-powerlevel10k-20230403-2 → ttf-meslo-nerd-font-powerlevel10k  20230403-2
volume_key-0.3.12-8 → volume_key  0.3.12-8

这个正则的可靠性很高,只要你的输入已经是去掉了架构(比如x86_64)和扩展名(比如.pkg.tar.zst)的包名字符串,就能100%适配所有正常的Arch包名格式——不管包名里有多少连字符、数字甚至特殊字符,都能准确拆分。

备注:内容来源于stack exchange,提问作者Gibbz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:09:35