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

如何用Python正则表达式提取加密货币地址并写入文件?

提取比特币加密货币地址的正则解决方案

问题场景

需要从如下包含密钥与地址的文本中,提取所有比特币地址:

Private Key HEX: 81533e629f27aee5ec97b425a5a6a1ef35527fb1082db16776aa054c0db6c93f
              
Private Key WIF: 5JoF25azjFR6iMe554QPPb4xyYPM79Ve3NFywnafwnFnt45qQ8s
              
Private Key WIF compressed: L1Z6smF3oUdNDY6cxv2DphNW4ZXdk8VQVSq8LpBctnkHWBJz4Zxm 
            
Public Key: 04f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4daa3724c9e1e652e18e4495f8288aa5c3e976ed64bba1b8518ce93a7ccaf3e422b 
                       
Public Key compressed: 03f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4da

                       
Public Address 1: 1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP   
                       
Public Address 1 compressed: 1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ   
                       
Public Address 3: 3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1  
                       
Public Address bc1 P2WPKH: bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2    
                       
Public Address bc1 P2WSH: bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa  

目标提取的地址包括:

  • 1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP
  • 1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ
  • 3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1
  • bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2
  • bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa

现有代码问题

你当前的代码存在三个核心问题:

  1. 正则仅匹配Public Address 1:开头的地址,无法覆盖其他类型的地址行(如compressed、3开头、bc1开头的地址)
  2. 使用match()方法只会匹配字符串开头的内容,而地址行并非在文本起始位置,无法命中
  3. 正则未通过分组单独提取地址部分,返回的是整行内容而非目标地址

可行解决方案

正则表达式设计

使用以下正则可以匹配所有Public Address开头行中的地址:

r"Public Address.*?:\s*([A-Za-z0-9]+)"

各部分解释:

  • Public Address.*?: 匹配以"Public Address"开头的行,直到遇到冒号(非贪婪匹配,避免跨行)
  • \s* 匹配冒号后任意数量的空白字符(包括空格、换行、制表符)
  • ([A-Za-z0-9]+) 通过分组捕获地址部分(比特币地址仅由字母数字组成)

完整代码

import re

def extract_crypto_addresses(input_text):
    # 匹配所有Public Address行中的地址
    pattern = re.compile(r"Public Address.*?:\s*([A-Za-z0-9]+)", re.IGNORECASE)
    # findall返回所有匹配的分组内容
    return pattern.findall(input_text)

# 测试示例文本
input_text = """Private Key HEX: 81533e629f27aee5ec97b425a5a6a1ef35527fb1082db16776aa054c0db6c93f
              
Private Key WIF: 5JoF25azjFR6iMe554QPPb4xyYPM79Ve3NFywnafwnFnt45qQ8s
              
Private Key WIF compressed: L1Z6smF3oUdNDY6cxv2DphNW4ZXdk8VQVSq8LpBctnkHWBJz4Zxm 
            
Public Key: 04f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4daa3724c9e1e652e18e4495f8288aa5c3e976ed64bba1b8518ce93a7ccaf3e422b 
                       
Public Key compressed: 03f23e94e1faf3a9883573507c52b60c857b0e34400b5bb951c07af1af2ddde4da

                       
Public Address 1: 1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP   
                       
Public Address 1 compressed: 1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ   
                       
Public Address 3: 3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1  
                       
Public Address bc1 P2WPKH: bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2    
                       
Public Address bc1 P2WSH: bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa  
"""

addresses = extract_crypto_addresses(input_text)
for addr in addresses:
    print(addr)

输出结果

运行代码后会输出所有目标地址:

1EMEJ6QxiPFW6RzYbzXVGojJubCGgGjDFP
1748nYkyMuzekueBPHQDzwX1txFfSw2ZBZ
3AUkFufz5viJiFKfTXPDaBS6og5ScJMCK1
bc1qgf5gqhw0zu5mdg2ckapeqqxxjqsjw6ypkrrkw2
bc1qldst6n54d5qxf6t3sffqepkhtdr9vnm9r395sjn9caq9pz50emwsexcnsa

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:57:07