如何用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
现有代码问题
你当前的代码存在三个核心问题:
- 正则仅匹配
Public Address 1:开头的地址,无法覆盖其他类型的地址行(如compressed、3开头、bc1开头的地址) - 使用
match()方法只会匹配字符串开头的内容,而地址行并非在文本起始位置,无法命中 - 正则未通过分组单独提取地址部分,返回的是整行内容而非目标地址
可行解决方案
正则表达式设计
使用以下正则可以匹配所有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
相关产品推荐
相关产品推荐

