【发布时间】:2022-01-26 11:03:53
【问题描述】:
我有一个使用广播接收器收听传入 SMS 消息的应用。
该应用仅接收来自特定发件人的消息。我想从消息中提取某些信息,即
- Txn 代码
- 日期
- 时间
- 金额
- 帐户
- 用户名
QAP04N99TG Confirmed.on 25/1/22 于 1:57 PMKsh1.00 从 收到>1123123322 约翰·杜马丁。新账户余额为 Ksh10.00。交易成本,Ksh0.00。
我尝试过使用下面的方法,但我只得到了 Txncode。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "^([a-zA-Z0-9]+)\s{1}[a-zA-Z0-9\.\s]|Ksh([0-9,.]+)\s|from\s([0-9]+)\s([a-zA-Z]+\s[a-zA-Z]+\s[a-zA-Z]+.)$";
final String string = "QAP04N99TG Confirmed.on 25/1/22 at 1:57 PMKsh1.00 received from 1123123322 JOHN DUE MARTIN. New Account balance is Ksh10.00. Transaction cost, Ksh0.00.";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
if(matcher.find()) {
String txnCode = matcher.group(1);
String date = matcher.group(2);
String time = matcher.group(3);
String amount = matcher.group(4);
String account = matcher.group(5);
String username = marcher.group(6);
System.out.println(txnCode+date+time+amount+account+username);
}
}
}
我只能得到 txnCode。 如果你知道我可以提取所有细节。请协助。
【问题讨论】:
-
您使用替换
|来匹配字符串中的不同部分,请注意,总共没有 6 个组。最后一个替代断言字符串$的结尾,但该部分当前不匹配。字符串中数据的顺序是否始终相同,所有部分是否始终存在? -
首先
if(matcher.find())应该是while (matcher.find())但是您的正则表达式模式中还有其他问题 -
也许this 模式有帮助?
标签: java regex android-studio