2015-06-26 16 views
5

Tôi đang thực hiện các bước dưới đây.Trích xuất (phân tích) số lượng và mô tả từ BIZ (Giao dịch) sms

  1. trận đấu sms với regex

  2. nếu chứa từ khóa nhất định sau đó nhận được giá trị từ cơ thể sms như lượng, mô tả (lý do thực hiện giao dịch), số tài khoản (nếu ATM rút), loại giao dịch (ghi nợ/tín dụng)

    regex này không khớp với tất cả các loại sms ngân hàng/giao dịch do đó không hiệu quả, có cách nào khác để nhận dạng thông điệp ngân hàng không.

dụ sms:

1) Thưa quý khách hàng, số tài khoản của bạn XXXXXX6377 đã ghi bởi 215.000 Rs là DBT/DBTL chuyển tiền vào 19/05/2015 - Ngân hàng Trung ương ẤN ĐỘ

2) A/c NN5715 ghi nợ cho Rs 2000; ATM WDL. A/c Bal (sub to chq realisatn) Rs13286.23 trên 24APR 21: 19 giờ. Gọi 1800226999 để chặn thẻ của bạn nếu bạn không sử dụng.

3) Thưa quý khách hàng, Ac bạn XXXXXXXX5666ghi với INR8,922.00 vào ngày 16 tháng 2 Info. INF * 000080483346 * KINH DOANH. Số dư khả dụng trên Net của bạn là INR 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; 
} 

Trả lời

1

Hai biểu thức thông thường sau giúp trong việc tìm kiếm số tiền từ hầu hết các giao dịch ngân hàng (HDFC, ICICI, ING, Kotak, SBI, Canara, PNB):

[Ii][Nn][Rr](\\s*.\\s*\\d*) 
[rR][sS](\\s*.\\s*\\d*) 

hãy bình luận nếu bạn có đã tìm ra những biểu hiện tốt hơn nhiều so với ở trên.

+0

cảm ơn vì swer là những regx sẽ cung cấp cho giao dịch thông tin riêng biệt –

+0

cảm ơn nhưng tôi nhận được chỉ số đầu tiên của số tiền bằng cách sử dụng [Ii] [Nn] [Rr] (\\ s *. \\ s * \\ d *) điều chỉnh expression.how tôi có thể nhận được tất cả các chữ số –

9

Để tìm số tiền từ thông báo giao dịch ngân hàng.

(?i)(?:(?:RS|INR|MRP)\.?\s?)(\d+(:?\,\d+)?(\,\d+)?(\.\d{1,2})?) 

Để tìm ra tên người bán từ thông điệp giao dịch ngân hàng.

(?i)(?:\sat\s|in\*)([A-Za-z0-9]*\s?-?\s?[A-Za-z0-9]*\s?-?\.?) 

Để tìm ra tên thẻ (thẻ ghi nợ/thẻ tín dụng) từ thông điệp giao dịch ngân hàng.

(?i)(?:\smade on|ur|made a\s|in\*)([A-Za-z]*\s?-?\s[A-Za-z]*\s?-?\s[A-Za-z]*\s?-?) 
+1

Tác phẩm của nó cho tôi để lấy số tiền từ thông điệp ngân hàng. Nhưng bây giờ tôi muốn tìm tên tài khoản mà từ đó số tiền của tôi được ghi có/Ghi nợ. ví dụ: thông điệp của tôi giống như "Cảm ơn bạn đã sử dụng Thẻ ghi nợ kết thúc bằng 1001 cho Rs.2500.00 trong MUMBAI tại ADITYA BIRLA FASHION vào ngày 2017-02-20". Bây giờ tôi muốn tìm nạp "ADITYA BIRLA FASHION" từ tin nhắn ngân hàng. vậy làm thế nào để làm điều đó? –

+0

@priyankakamthe: Bạn có thể sử dụng mẫu này cho thông điệp của mình: (? I) (?: \ Sat \ s | in | on \ *) ([A-Za-z0-9] * \ s? -? \ S? [A-Za-z0-9] * \ s? -? \.?) –

+0

@VikalpPatel regx này hoạt động cho những thư có ** tại ** hoặc ** trong ** hoặc ** trên **. Nhưng nếu tin nhắn có chứa khác hơn này. Giống như: "Khách hàng thân mến, Bạn đã mua Thẻ ghi nợ INR1,600.00 vào ngày 30 tháng 1 Info.VPS * AGGARWAL SH." –

0

Trong python sau Regex có thể hữu ích.

Đối với việc tìm kiếm lượng trong các tin nhắn ngân hàng

[rR][sS]\.?\s[,\d]+\.?\d{0,2}|[iI][nN][rR]\.?\s*[,\d]+\.?\d{0,2} 

Đối với việc tìm kiếm A/C không

[0-9]*[Xx\*]*[0-9]*[Xx\*]+[0-9]{3,} 
0

Để phát hiện bất kỳ thông báo giao dịch trong android:

"(?=.*[Aa]ccount.*|.*[Aa]/[Cc].*|.*[Aa][Cc][Cc][Tt].*|.*[Cc][Aa][Rr][Dd].*)(?=.*[Cc]redit.*|.*[Dd]ebit.*)(?=.*[Ii][Nn][Rr].*|.*[Rr][Ss].*)" 

thử nghiệm trên nhiều tin nhắn ngân hàng

Các vấn đề liên quan