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

如何用Perl正则交换捕获组并清理GPG命令输出内容

嘿,我帮你调整了正则表达式,刚好能实现你要的两个效果——交换组2和组3的内容,同时把组4里的方括号和里面的文本去掉:

^pub\s+(\S+)\s+\S+\s+.*\s+.{0,32}(\S+)\s+(?<=pub\s+\S+\s+(\S+)\s+.*)\s+uid\s+\[.*?\]\s*(.*?)<(\S+)>

具体实现说明

咱们拆解一下这个正则是怎么满足需求的:

1. 交换组2与组3的内容

原正则里组2抓的是日期2018-02-28,组3抓的是密钥末尾11F63B00。现在我调整了捕获逻辑:

  • 组1:还是(\S+),负责抓加密算法dsa1024;
  • 组2:通过(\S+)直接捕获密钥末尾的11F63B00(也就是原组3的内容);
  • 组3:用正向回顾后发断言(?<=pub\s+\S+\s+(\S+)\s+.*)回溯前面的内容,把日期2018-02-28(原组2的内容)抓进来,这样就实现了两个组内容的交换。

2. 清理组4的内容

原组4包含uid [ unknown] John Doe,现在我用uid\s+\[.*?\]\s*(.*?)来处理:

  • uid\s+\[.*?\]\s*精准跳过uid [ unknown]这部分不需要的内容;
  • (.*?)只捕获纯名字John Doe作为组4的结果,彻底去掉了方括号和里面的文本。

测试后的捕获组结果

用你给的待匹配文本测试,最终捕获组输出会是:

  • 组1:dsa1024
  • 组2:11F63B00
  • 组3:2018-02-28
  • 组4:John Doe
  • 组5:jogn@doe.name

完全符合你的要求!

内容的提问来源于stack exchange,提问作者Ilia Ross

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:06:29