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

如何编写正则表达式匹配每段set private-key至加密私钥结束的完整内容

问题描述

我需要编写正则表达式,从给定文本中匹配出3段同时包含set private-key和-----END ENCRYPTED PRIVATE KEY-----"的内容,且需包含这两行本身。我已有匹配起始行的表达式^.*set private-key.*$和匹配结束行的表达式^-----END ENCRYPTED PRIVATE KEY-----"$,但合并为^.*set private-key.*$[\s\S]*^-----END ENCRYPTED PRIVATE KEY-----"$时,会选中第一个起始行到最后一个结束行之间的所有内容,无法单独匹配每一段,特此求助。

示例文本

set comments "This is a comment "
    set private-key "-----BEGIN ENCRYPTED PRIVATE KEY-----\nMIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpQqr96DiyZICAggA\nMIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpQqr96DiyZICAggA\nMIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpQqr96DiyZICAggA\n-----END ENCRYPTED PRIVATE KEY-----"\n\n        set range global\n        set source factory\n        set last-updated 1546857127\n    next\n    edit "nothing important"\n        set password ENC b1yM5KXgCoMcQ5Nc8zXW4RUgQe2XnxnVw3JDavLkx7L/dMwEudi2CuZDVEnqaoP/K3oKQb7r0WMwblzPu3sBzJkrSP28WQ==\n        set comments "This is another comment"\n        set private-key "-----BEGIN ENCRYPTED PRIVATE KEY-----\nJzW9TfmKu1lfYq/edslhke7RVPRpJ/Xu+Asbwd/P1qn/ffGbv713Xtyy95zBQbRe\n8u1I3cGvr8LMHsMOdgFuHMr0OcVp7B9amCKQeXQImXK1SXHnZjPuIw7IYBlX1jvN\nMIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpQqr96DiyZICAggA\n-----END ENCRYPTED PRIVATE KEY-----"\n    next\n    edit "nothing important"\n        set password ENC b1yM5KXgCoMcQ5Nc8zXW4RUgQe2XnxnVw3JDavLkx7L/dMwEudi2CuZDVEnqaoP/K3oKQb7r0WMwblzPu3sBzJkrSP28WQ==\n        set comments "This is another comment"\n        set private-key "-----BEGIN ENCRYPTED PRIVATE KEY-----\nJzW9TfmKu1lfYq/edslhke7RVPRpJ/Xu+Asbwd/P1qn/ffGbv713Xtyy95zBQbRe\n8u1I3cGvr8LMHsMOdgFuHMr0OcVp7B9amCKQeXQImXK1SXHnZjPuIw7IYBlX1jvN\nMIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIpQqr96DiyZICAggA\n-----END ENCRYPTED PRIVATE KEY-----"\n    edit "nothing important"\n        set password ENC b1yM5KXgCoMcQ5Nc8zXW4RUgQe2XnxnVw3JDavLkx7L/dMwEudi2CuZDVEnqaoP/K3oKQb7r0WMwblzPu3sBzJkrSP28WQ==\n        set private-key "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDyqjjtjF\nb3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDyqjjtjF\nb3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDyqjjtjF\nXUq7T96YiMJWNG4w==\n-----END OPENSSH PRIVATE KEY-----\n"\n\n```

## 解决方案
### 修正后的正则表达式
```regex
^.*set private-key.*$[\s\S]*?^-----END ENCRYPTED PRIVATE KEY-----"$

需配合**多行模式(Multiline Mode,标记为m)**使用,不同场景的开启方式:

  • JavaScript:/^.*set private-key.*$[\s\S]*?^-----END ENCRYPTED PRIVATE KEY-----"$/gm
  • Python:re.findall(r'^.*set private-key.*$[\s\S]*?^-----END ENCRYPTED PRIVATE KEY-----"$', text, re.MULTILINE)
  • 在线正则工具:直接勾选"多行模式"选项

原理说明

  • 原表达式中的[\s\S]*是贪婪匹配规则,会尽可能覆盖更多内容,导致从第一个起始行直接匹配到最后一个结束行。
  • 改为[\s\S]*?后切换为非贪婪匹配,会在遇到第一个符合条件的结束行时停止匹配,实现逐段提取目标内容。
  • 多行模式的作用是让^和$能够匹配每行的首尾,而非整个文本的首尾,确保起始行和结束行的匹配精度。

内容的提问来源于stack exchange,提问作者Dan Sherwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:54