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

Python中使用正则查找以太坊地址返回空值的问题排查

问题原因
  • 正则锚点使用错误:^ 标记整个字符串的起始位置,$ 标记整个字符串的结束位置,你写的^0x[a-fA-F0-9]{40}$规则,只有当传入的整段字符串完全就是一个以太坊地址、前后没有任何其他字符时才能匹配成功。但你的row变量里两个地址前后都夹杂了其他普通字符,自然返回空结果。
  • re.findall 用法错误:当正则表达式没有定义捕获组时,findall会直接返回所有匹配结果组成的字符串列表,不是正则匹配对象。你原有代码里遍历调用match.group()会直接抛出属性错误,因为字符串类型没有group()方法。
修正方案

去掉正则里多余的^和$锚点,同时调整遍历逻辑,不需要调用group()方法:

import re
row = 'afdsf1 asdfasdf0xc7d688cb053c19ad5ee4f48c348958880537835fdsgdsfg 0xc7d688cb053c19ad5ee4f48c348958880537835f'
all_match = re.findall(pattern=r'0x[a-fA-F0-9]{40}', string=row)
for match in all_match:
    print(match)
print(all_match)

运行后输出结果:

0xc7d688cb053c19ad5ee4f48c348958880537835f
0xc7d688cb053c19ad5ee4f48c348958880537835f
['0xc7d688cb053c19ad5ee4f48c348958880537835f', '0xc7d688cb053c19ad5ee4f48c348958880537835f']

补充说明:如果你的业务场景要求以太坊地址前后不能紧跟其他字母/数字,避免匹配到长字符串里截断的无效片段,可以把正则改成r'(?<![a-fA-F0-9])0x[a-fA-F0-9]{40}(?![a-fA-F0-9])',通过前后负向断言过滤不符合边界要求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:45:36