如何使用正则表达式提取交易记录中不等于BNB的Token币种?
原正则问题分析
- 你写的
[^BNB]是字符集取反规则,仅表示匹配单个不为B/N的字符,不是排除完整的BNB字符串,这是正则使用的常见误区 - 后向断言
(?<=\d\w )逻辑错误,你的金额行结构为「数值+空格+币种」,金额末尾是数字,不是数字加字母,无法正确定位币种的起始位置
正确正则写法
如果你需要仅排除完全等于BNB的币种,保留WBNB、RBH:
使用正则:(?<=\d\s)(?!BNB\b)\w+
(?<=\d\s):正向后向断言,定位到「数字+空格」后的位置,也就是币种的起始位置(?!BNB\b):负向前行断言,保证当前位置后面不是完整的BNB单词(\b为单词边界,避免误判包含BNB的其他币种)\w+:匹配币种的所有字母数字字符
如果你需要排除所有包含BNB的币种,仅保留RBH(符合你本例的预期):
使用正则:(?<=\d\s)(?!\w*BNB\b)\w+
- 对比上面的写法,仅在负向断言里增加了
\w*,表示只要币种字符串里任意位置出现BNB就排除
匹配验证
用上述第二种正则匹配你提供的样本文本,最终结果仅会返回RBH,完全符合你的预期。
内容的提问来源于stack exchange,提问作者salda
相关产品推荐
相关产品推荐

