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

Android平台:正则表达式筛选信用卡/借记卡交易短信

如何精准筛选信用卡/借记卡交易短信

兄弟,我太懂你这个痛点了——只靠卡号正则确实会把一堆银行推广短信也误捞进来,毕竟现在很多推广短信也会带上脱敏的卡号来蹭眼熟。得从交易短信的核心特征入手,把正则和关键词过滤结合起来,给你几个实用的思路:

1. 锁定交易核心关键词

交易短信必然会包含和资金变动相关的动作词,比如「消费」「支出」「转账」「还款」「入账」「扣款」「交易成功」「支付」这些。你可以把这些关键词和卡号正则结合,先判断短信有没有这些词,再匹配卡号,从根源上排除推广短信。

优化后的组合正则可以这么写:

(消费|支出|转账|还款|入账|扣款|交易成功|支付).*([0-9]{4}[Xx*]{4,8}[0-9]{4})

这里把卡号正则也优化了——脱敏银行卡号一般是前4位数字,中间4-8位打码(*或x),最后4位数字,用[0-9]{4}[Xx*]{4,8}[0-9]{4}能精准匹配这种格式,避免误抓其他数字串。

2. 叠加金额特征过滤

交易短信肯定会有金额信息,格式无非是「¥XX.XX」「金额:XX.XX」或者「$XX.XX」这类。把金额正则也加进去,三重过滤(交易关键词+卡号+金额),精准度会大幅提升。

金额的正则可以这么写:

¥\d+(\.\d{1,2})?|金额:\d+(\.\d{1,2})?

3. 反向排除推广关键词

反过来想,推广短信常带「办理」「升级」「额度提升」「优惠」「活动」「免费」这些词,你可以在筛选逻辑里加一步:如果短信包含这些词,直接跳过,不用再走后续匹配。

举个实际代码例子(Python)

下面是一个完整的筛选逻辑示例,把上面的思路整合起来:

import re

# 预编译正则,提升效率
transaction_keywords = re.compile(r'消费|支出|转账|还款|入账|扣款|交易成功|支付')
exclude_keywords = re.compile(r'办理|升级|额度提升|优惠|活动|免费')
card_pattern = re.compile(r'[0-9]{4}[Xx*]{4,8}[0-9]{4}')
amount_pattern = re.compile(r'¥\d+(\.\d{1,2})?|金额:\d+(\.\d{1,2})?')

# 假设这是你的短信列表
sms_list = [
    "您尾号1234的储蓄卡账户10月5日10:00消费¥199.00,余额5000.00",
    "【XX银行】您的信用卡尾号5678可提升额度至5万,点击办理",
    "您尾号9012的信用卡于10月5日14:30还款¥2000.00,已到账",
    "【XX银行】双11信用卡满减活动,尾号3456卡可享满100减20"
]

# 筛选结果
transaction_sms = []
for sms in sms_list:
    # 先排除推广短信
    if exclude_keywords.search(sms):
        continue
    # 同时满足交易关键词、卡号、金额三个条件才保留
    if all([
        transaction_keywords.search(sms),
        card_pattern.search(sms),
        amount_pattern.search(sms)
    ]):
        transaction_sms.append(sms)

print(transaction_sms)

运行后只会输出真正的交易短信,推广短信会被直接排除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:58:47