Rak*_*oni 9 sms parsing android inbox
我正在做以下步骤.
匹配短信与正则表达式
如果包含指定的关键字,则从短信体获取价值,如金额,描述(交易原因),账号(如果ATM取款),交易类型(借方/贷方)
这个正则表达式不匹配所有类型的银行/交易短信因此它没有效率,是否有任何其他方式来识别银行消息.
示例短信:
1)尊敬的客户,您的帐号XXXXXX6377已经记由卢比215.000是DBT/DBTL资金转移上19/05/2015 -印度中央银行
2)的A/C NN5715 借记为卢比2000 ; ATM WDL.A/c Bal(sub to chq realisatn)Rs13286.23 on 24APR 21:19hr.如果您没有使用,请拨打1800226999以阻止您的卡.
3)尊敬的客户,您的交流XXXXXXXX5666被记入与INR8,922.00于2月16日的信息.INF*000080483346*薪水.您的净可用Bal价格为8,922.00卢比.
private static ArrayList<SmsDto> parsevalues(ArrayList<SmsDto> body_val) {
ArrayList<SmsDto> resSms = new ArrayList<>();
for (int i = 0; i < body_val.size(); i++) {
SmsDto smsDto = body_val.get(i);
Pattern regEx
= Pattern.compile("(?:inr|rs)+[\\s]*[0-9+[\\,]*+[0-9]*]+[\\.]*[0-9]+");
// Find instance of pattern matches
Matcher m = regEx.matcher(smsDto.getBody());
if (m.find()) {
try {
Log.e("amount_value= ", "" + m.group(0));
String amount = (m.group(0).replaceAll("inr", ""));
amount = amount.replaceAll("rs", "");
amount = amount.replaceAll("inr", "");
amount = amount.replaceAll(" ", "");
amount = amount.replaceAll(",", "");
smsDto.setAmount(Double.valueOf(amount));
if (smsDto.getBody().contains("debited") ||
smsDto.getBody().contains("purchasing") || smsDto.getBody().contains("purchase") || smsDto.getBody().contains("dr")) {
smsDto.setTransactionType("0");
} else if (smsDto.getBody().contains("credited") || smsDto.getBody().contains("cr")) {
smsDto.setTransactionType("1");
}
smsDto.setParsed("1");
Log.e("matchedValue= ", "" + amount);
if (!Character.isDigit(smsDto.getSenderid().charAt(0)))
resSms.add(smsDto);
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.e("No_matchedValue ", "No_matchedValue ");
}
}
return resSms;
}
Run Code Online (Sandbox Code Playgroud)
小智 11
用于从银行交易消息中查找金额.
(?i)(?:(?:RS|INR|MRP)\.?\s?)(\d+(:?\,\d+)?(\,\d+)?(\.\d{1,2})?)
Run Code Online (Sandbox Code Playgroud)
用于从银行交易消息中找出商家名称.
(?i)(?:\sat\s|in\*)([A-Za-z0-9]*\s?-?\s?[A-Za-z0-9]*\s?-?\.?)
Run Code Online (Sandbox Code Playgroud)
用于从银行交易消息中找出卡名(借记卡/信用卡).
(?i)(?:\smade on|ur|made a\s|in\*)([A-Za-z]*\s?-?\s[A-Za-z]*\s?-?\s[A-Za-z]*\s?-?)
Run Code Online (Sandbox Code Playgroud)
以下两个正则表达式有助于查找大多数银行交易的金额(HDFC、ICICI、ING、KOTAK、SBI、CANARA、PNB):
[Ii][Nn][Rr](\\s*.\\s*\\d*)
[rR][sS](\\s*.\\s*\\d*)
Run Code Online (Sandbox Code Playgroud)
如果您想出比上述更好的表达方式,请发表评论。
| 归档时间: |
|
| 查看次数: |
6941 次 |
| 最近记录: |