使用 android 中的模式从标准文本中获取一些字符串



我正在开发一个安卓应用程序,该应用程序具有基于SMS传入消息的广播接收器。

我想跟踪来自特定发件人号码的每条消息,并使用该SMS做一些事情,例如,从每条消息中检索一些数据。

我想分析的消息主体是这样的:

"Usted ha recibido5.0CUC del numero55391393.萨尔多校长1565.0CUC, 线活动哈斯塔 2019-02-10, 旺斯 2019-03-12">

我想用模式类提取以粗体标记的值。但我在正则表达式方面真的很新。一些帮助?

这是我的实际代码:

public class SMSReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final Bundle bundle = intent.getExtras();
try {
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
assert pdusObj != null;
for (Object aPdusObj : pdusObj) {
SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) aPdusObj);
String senderNum = currentMessage.getDisplayOriginatingAddress();
String message = currentMessage.getDisplayMessageBody();
/*
String body = currentMessage.getMessageBody().toString();
String address = currentMessage.getOriginatingAddress();
*/
Log.i("SmsReceiver", "senderNum: " + senderNum + "; message: " + message);
//Save to DB
if (senderNum.equals("Cubacel")) {
Toast.makeText(context, "senderNum: " + senderNum + ", message: " + message, Toast.LENGTH_LONG).show();
//Parse this SMS with Regular Expresions

} else {
//Search for transferred numbers pending
}
} // end for loop
} // bundle is null
} catch (Exception e) {
Log.e("SmsReceiver", "Exception smsReceiver" + e);
}
}
}

这是一个使用 JS 的示例工作代码,但我不知道如何在 Java 中实现 https://regexr.com/3mgq2

String re1=".*?";   // Non-greedy match on filler
String re2="(5\.0)";   // Float 1
String re3=".*?";   // Non-greedy match on filler
String re4="(55391393)";    // Number 1
String re5=".*?";   // Non-greedy match on filler
String re6="(1565\.0)";    // Float 2
Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

试试这个:)

我想我明白了,请告诉我是否有更好的方法:

public String[] parseTransfer(String cubacelMessage) {
String[] data = new String[2];
Pattern pattern = Pattern.compile("Usted ha recibido (\d+\.\d+) CUC del numero (\d+).*", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(cubacelMessage);
matcher.find();
data[1] = matcher.group(1);
data[2] = matcher.group(2);
return data;
}

最新更新