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

如何用Python正则匹配GPG签名?代码报错求修复指导

GPG签名正则匹配问题修复

问题概述

尝试用正则表达式匹配Git日志中的GPG签名块时,触发了DeprecationWarning警告,且原正则无法正确匹配目标内容。

错误原因

  1. 模式标志位置错误:正则中的(?s)(单行模式,让.匹配换行符)被放在表达式中间,Python的re模块要求这类内联标志必须置于正则开头,否则会触发弃用警告。
  2. 正则语法错误:原正则里-----BEGIN SIGNED MESSAGE------{3,}多写了一个横杠,且错误使用$和^锚点(默认匹配整个字符串首尾,而非行首尾),导致匹配逻辑失效。

修复方案

  1. 调整模式标志:将单行模式通过re.DOTALL(等价于(?s))作为re.search的flags参数传入,避免内联标志位置问题。
  2. 修正正则语法:
    • 移除多余横杠,正确匹配-----BEGIN SIGNED MESSAGE-----
    • 去掉错误锚点,改为匹配从gpgsig开头到-----END SIGNED MESSAGE-----结束的整块内容
    • 用非贪婪匹配.*?确保只匹配单个签名块

修复后的完整代码

import re

if __name__ == '__main__':
    log = '''
tree e76fa5ccd76492d843b6a4a06038d1c3b5aef6f8
parent 0d533a3a5fd51fd8c2x932832ef9ea91d0756c18
author firstname lastname <userid@company.com> 1676061999 -0800
committer firstname lastname <userid@company.com> 1676061999 -0800
gpgsig -----BEGIN SIGNED MESSAGE-----
 MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0B
 BwEAAKCCAuswggLnMIICjKADAgECAhANVjmYTunVjjNs9EhuJ4YXMAoGCCqGSM49
 BAMCME0xKTAnBgNVBAMMIEFmorplIENvcnBvcmF0ZSBTaWduaW5nIEVDQyBDQSAx
 MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzAeFw0yMzAyMDkxOTU2
 NTlaFw0yMzAzMDIyMDA2NTlaMDIxEzARBgNVBAoMCkFmorplIEluYy4xGzAZBgNV
 BAMMEmduYWtrYWxhQGFmorplLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA
 BGwmvh7HYXCyerdERaLr+OOJ3AQxYNSfUorWkROO2xv/ra8yYGL/aBCYJSQUoYRY
 kY4GE90s8NAUwmQmsthdbFSjggFnMIIBYzAMBgNVHRMBAf8EAjAAMB8GA1UdIwQY
 MBaAFEJi3AGoy1MCpVzt8IjG9uFJdhE9MHMGCCsGAQUFBwEBBGcwZTAvBggrBgEF
 BQcwAoYjaHR0cDovL2NlcnRzLmFmorplLmNvbS9hY3NlY2NhMS5kZXIwMgYIKwYB
 BQUHMAGGJmh0dHA6Ly9vY3NwLmFmorplLmNvbS9vY3NwMDMtYWNzZWNjMTA0MB0G
 A1UdEQQWMBSBEmduYWtrYWxhQGFmorplLmNvbTAUBgNVHSUEDTALBgkqhkiG92Nk
 BBQwMgYDVR0fBCswKTAnoCWgI4YhaHR0cDovL2NybC5hcHBsZS5jb20vYWNzZWNj
 YTEuY3JsMB0GA1UdDgQWBBR1dRRNvQ/7RwRTorG97HmKR4xoJjAOBgNVHQ8BAf8E
 BAMCB4AwJQYDVR0gBB4wHDAMBgoqhkiG92NkBRQBMAwGCiqGSIb3Y2QFFAIwCgYI
 KoZIzj0EAwIDSQAwRgIhAPQ4IiaCG6V5A7u0lwbhJxyXHf9jN2IoqRLj7BlFo4Uv
 AiEAtJAekfgFoiE3h8ZZDgvhwRiwPJseo8GDfM0tb5DP0h8xggE3MIIBMwIBATBh
 ME0xKTAnBgNVBAMMIEFmorplIENvcnBvcmF0ZSBTaWduaW5nIEVDQyBDQSAxMRMw
 EQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUwIQDVY5mE7p1Y4zbPRIbieG
 FzANBglghkgBZQMEAgEFAKBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJ
 KoZIhvcNAQkFMQ8XDTIzMDIxMDIwNDY1MFowLwYJKoZIhvcNAQkEMSIEIP8j8iYG
 Ggpc74AeVdxLkIArVBLw3+vw6/FVmGtNig+uMAkGByqGSM49AgEERjBEAiB0dBI3
 9c1b/bsStaT3blWb19ehQDt8J/NNov/TzSgEzAIgWvpSs/DZI7wmlHtIJ8HpmIp4
 +oNOu4kJJlhtUy9ZImUAAAAAAAA=
 -----END SIGNED MESSAGE-----

'''

# 修正后的正则表达式
pattern = r"gpgsig -----BEGIN SIGNED MESSAGE-----\s*.*?\s*-----END SIGNED MESSAGE-----"

# 使用re.DOTALL让.匹配换行符
if re.search(pattern, log, flags=re.DOTALL):
    print("找到匹配项")

说明

  • re.DOTALL:让正则中的.匹配包括换行符在内的所有字符,确保覆盖多行签名内容
  • \s*:匹配签名块前后的空白字符(包括换行),增强匹配鲁棒性
  • 非贪婪匹配.*?:避免误匹配多个签名块(如果日志存在多个的话)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:05:15