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

Android中使用Pattern类从短信文本提取指定数据的实现问题

用Pattern类提取短信指定数据的解决方案

嘿,我来帮你搞定这个正则提取的问题!先梳理下咱们要从这条固定格式的西班牙语短信里抓的核心信息:

  • 收到的转账金额(比如5.0 CUC)
  • 转账方的号码(比如55391393)
  • 主账户余额(比如1565.0 CUC)
  • 线路激活截止日期(比如2019-02-10)
  • 账户到期日期(比如2019-03-12)

第一步:编写精准匹配的正则表达式

因为短信格式是固定的,我们可以用捕获组来锁定每个目标值,正则表达式如下:

Usted ha recibido (\d+\.\d+) CUC del numero (\d+) .Saldo principal (\d+\.\d+) CUC, linea activa hasta (\d{4}-\d{2}-\d{2}), vence (\d{4}-\d{2}-\d{2})

正则各部分简单解释:

  • (\d+\.\d+):匹配带小数点的数字(比如金额、余额),括号包裹后会成为可提取的捕获组
  • (\d+):匹配纯数字的手机号
  • (\d{4}-\d{2}-\d{2}):精准匹配YYYY-MM-DD格式的日期

第二步:Android中Pattern&Matcher的代码实现

把这段逻辑加到你的BroadcastReceiver短信处理流程里就行:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// 假设这是你接收到的短信内容
String smsContent = "Usted ha recibido 5.0 CUC del numero 55391393 .Saldo principal 1565.0 CUC, linea activa hasta 2019-02-10, vence 2019-03-12";

// 定义正则(注意Java里要转义反斜杠)
String regex = "Usted ha recibido (\\d+\\.\\d+) CUC del numero (\\d+) .Saldo principal (\\d+\\.\\d+) CUC, linea activa hasta (\\d{4}-\\d{2}-\\d{2}), vence (\\d{4}-\\d{2}-\\d{2})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(smsContent);

// 检查匹配结果并提取数据
if (matcher.find()) {
    // 捕获组索引从1开始,对应正则里的括号顺序
    String receivedAmount = matcher.group(1); // 拿到5.0
    String senderNumber = matcher.group(2);   // 拿到55391393
    String mainBalance = matcher.group(3);   // 拿到1565.0
    String activeUntil = matcher.group(4);   // 拿到2019-02-10
    String expireDate = matcher.group(5);    // 拿到2019-03-12

    // 这里替换成你的业务逻辑,比如存数据库、更新UI等
    System.out.println("收到转账:" + receivedAmount + " CUC");
    System.out.println("转账方号码:" + senderNumber);
    System.out.println("当前主余额:" + mainBalance + " CUC");
} else {
    // 容错处理:如果短信格式不符合预期,提示或记录日志
    System.out.println("短信格式不匹配,无法提取数据");
}

小提示

如果后续短信格式有细微变化(比如多了空格、标点调整),可以给正则加一些弹性规则:比如用\\s*匹配任意数量的空格,用\\.?匹配可选的小数点,提升正则的鲁棒性。

内容的提问来源于stack exchange,提问作者Erich García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:27:04