fork download
  1. import re
  2.  
  3. pattern = r"(?P<date>\d{2}/\d{2})\s+(?P<desc>\w[\w ]*)(?P<expense>\$[\d.,]*)\s{2}(?P<deposit>\d[\d.,]*)\s.*(?P<desc_more>(?:\n(?!\d+\/\d|continued\b|Page\s+\d).*)*)"
  4.  
  5. s = (" 0 0 $12,345.67 \n"
  6. "08/27 DEBIT CARD PURCHASE XXXXXX 5541XXXXXX $1.23 0 $123,456.78\n"
  7. "RACETRAC467 00004671 PLEASANTVILLEPA\n"
  8. "08/27 BANK FUNDS TRANSFER DB $45.67 0 $124,816.32\n"
  9. "TO SMITH,JOHN\n"
  10. "SAVINGS #0001, CONF# 8675309\n"
  11. "continued on next page>>>\n"
  12. " 987654-3210\n"
  13. "Page 1 of 11\n"
  14. "07/27 DEBIT CARD PURCHASE XXXXXX 6541XXXXXX $2.23 0 $223,456.78")
  15.  
  16. matches = re.finditer(pattern, s)
  17.  
  18. for _, match in enumerate(matches):
  19. d = match.groupdict()
  20. d.update({'desc': re.sub(r"[^\S\n]*\n", " " , match.groupdict().get('desc') + match.groupdict().get('desc_more'))})
  21. del d["desc_more"]
  22. print(d)
Success #stdin #stdout 0.03s 9532KB
stdin
Standard input is empty
stdout
{'date': '08/27', 'desc': 'DEBIT CARD PURCHASE XXXXXX 5541XXXXXX RACETRAC467 00004671 PLEASANTVILLEPA', 'expense': '$1.23', 'deposit': '0'}
{'date': '08/27', 'desc': 'BANK FUNDS TRANSFER DB TO SMITH,JOHN SAVINGS #0001, CONF# 8675309', 'expense': '$45.67', 'deposit': '0'}
{'date': '07/27', 'desc': 'DEBIT CARD PURCHASE XXXXXX 6541XXXXXX  ', 'expense': '$2.23', 'deposit': '0'}