【问题标题】:regex multiple lines and store results in an array iteratively正则表达式多行并将结果迭代地存储在数组中
【发布时间】:2020-09-30 00:03:17
【问题描述】:

我有一张银行对账单,并已使用 Regex 提取表中的所有项目。 名单是

['15-10-2019 BIL/INFT/001823982708/Block2B5/ MAHAK JUNEJA 5,130.00 5,19,319.08',
 '15-10-2019 BIL/INFT/001824120963/watermaintoct/ AAANKSHA AGRAWA 3,895.00 5,23,214.08',
 '15-10-2019 MOBILE BANKING MMT/IMPS/928820560895/VURIMI UMA/AXIS BANK LTD 5,201.00 5,28,415.08',
 '15-10-2019 MOBILE BANKING MMT/IMPS/928820342293/B1H2/KAVURI KIS/HDFC BANK LTD 3,401.00 5,31,816.08',
 '15-10-2019 SE EER TRS 2 Malntenen eee guna. Shula HEEGBAME 3,732.00 5,35,548.08',
 '16-10-2019 CHEQUE 7048 CLG/ZAP POWER SYSTEMS/UBI 16,815.00 5,18,733.08',
 '17-10-2019 MOBILE BANKING NANCE ee osnesiBers GGRA fee/VOONA SRIN/HDFC 500.00 5,19,233.08',
 '18-10-2019 CHEQUE 7049 CLG/BANGALORE APARTMENTS FED/SBI 3,500.00 5,15,733.08',
 '21-10-2019 CHEQUE 7054 CASH PAID:mohan 1075 BANGALORE-BELLANDUR VILLAGE 20,000.00 4,95,733.08',
 '24-10-2019 CHEQUE 7052 CLG/V PRAVEEN RAM/YES 14,000.00 4,81,733.08',
 '25-10-2019 CHEQUE 7051 CLG/BESCOM S/UTI 17,385.00 4,64,348.08',
 '30-10-2019 107510010791I0 Int on FD/RD XXX0791 Tds:0.Int:8625 and TAX:0. 8,625.00 4,72,973.08',
 '31-10-2019 CHEQUE 7055 CLG/ADVANCE ENGINEERING CORPORATION/HSB 14,337.00 4,58,636.08']

我需要以这种格式存储它们:

Date        Item                           Name         Amount    Total       
15-10-2019  BIL/INFT/001823982708/Block2B5 MAHAK JUNEJA 5,130.00  5,19,319.08 

列表中的每一行

【问题讨论】:

    标签: arrays python-3.x regex pandas loops


    【解决方案1】:

    在列表中使用命名元组“事务”,您可以收集所有数据,尽管项目和名称仍需要更清晰的正则表达式分离:

    from collections import namedtuple
    import re
    
    l = [
        "15-10-2019 BIL/INFT/001823982708/Block2B5/ MAHAK JUNEJA 5,130.00 5,19,319.08",
        "15-10-2019 BIL/INFT/001824120963/watermaintoct/ AAANKSHA AGRAWA 3,895.00 5,23,214.08",
        "30-10-2019 107510010791I0 Int on FD/RD XXX0791 Tds:0.Int:8625 and TAX:0. 8,625.00 4,72,973.08",
        "31-10-2019 CHEQUE 7055 CLG/ADVANCE ENGINEERING CORPORATION/HSB 14,337.00 4,58,636.08",
    ]
    
    cols = ["Date", "Item_Name", "Amount", "Total"]
    
    date_pattern = re.compile(r"\d{2}-\d{2}-\d{4}", re.I)
    item_and_name_pattern = re.compile(r"(?<=\d{2}-\d{2}-\d{4}\s).*", re.I)
    amount_pattern = re.compile(r"\d+,\d+.\d+", re.I)
    total_pattern = re.compile(r"\d+,\d+,\d+.\d+$", re.I)
    
    Transaction = namedtuple("Transaction", cols)
    transactions = []
    
    for item in l:
        date = re.search(date_pattern, item).group()
        total = re.search(total_pattern, item).group()
        temp_1 = item.rstrip(total)
        amount = re.search(amount_pattern, temp_1).group()
        temp_2 = temp_1.strip().rstrip(amount)
        item_and_name = re.search(item_and_name_pattern, temp_2).group()
    
        t = Transaction(date, item_and_name, amount, total)
        transactions.append(t)
    
    for t in transactions:
        print(t)
    

    返回:

    Transaction(Date='15-10-2019', Item_Name='BIL/INFT/001823982708/Block2B5/ MAHAK JUNEJA ', Amount='5,130.00', Total='5,19,319.08')
    Transaction(Date='15-10-2019', Item_Name='BIL/INFT/001824120963/watermaintoct/ AAANKSHA AGRAWA ', Amount='3,895.00', Total='5,23,214.08')
    Transaction(Date='30-10-2019', Item_Name='107510010791I0 Int on FD/RD XXX0791 Tds:0.Int:8625 and TAX:0. ', Amount='8,625.00', Total='4,72,973.08')
    Transaction(Date='31-10-2019', Item_Name='CHEQUE 7055 CLG/ADVANCE ENGINEERING CORPORATION/HSB ', Amount='14,337.00', Total='4,58,636.08')
    

    【讨论】:

    • 谢谢古斯塔夫!!我知道了解如何剥离项目和名称可能需要一点研究。这很好用。我需要插入一个 try catch 块来逃避数量不存在的错误。知道如何以字典格式表示结果吗?抱歉,我没有足够的声望来投赞成票。
    • out = [{k:v for k, v in f._asdict().items()} for f in transactions] 似乎起到了字典的作用
    • 哇,看起来不错!很抱歉反馈迟了
    【解决方案2】:

    我不确定您想如何存储这些值,但您可以使用以下拆分方法,

    l1=['15-10-2019 BIL/INFT/001823982708/Block2B5/ MAHAK JUNEJA 5,130.00 5,19,319.08',
     '15-10-2019 BIL/INFT/001824120963/watermaintoct/ AAANKSHA AGRAWA 3,895.00 5,23,214.08',
     '15-10-2019 MOBILE BANKING MMT/IMPS/928820560895/VURIMI UMA/AXIS BANK LTD 5,201.00 5,28,415.08',
     '15-10-2019 MOBILE BANKING MMT/IMPS/928820342293/B1H2/KAVURI KIS/HDFC BANK LTD 3,401.00 5,31,816.08',
     '15-10-2019 SE EER TRS 2 Malntenen eee guna. Shula HEEGBAME 3,732.00 5,35,548.08',
     '16-10-2019 CHEQUE 7048 CLG/ZAP POWER SYSTEMS/UBI 16,815.00 5,18,733.08',
     '17-10-2019 MOBILE BANKING NANCE ee osnesiBers GGRA fee/VOONA SRIN/HDFC 500.00 5,19,233.08',
     '18-10-2019 CHEQUE 7049 CLG/BANGALORE APARTMENTS FED/SBI 3,500.00 5,15,733.08',
     '21-10-2019 CHEQUE 7054 CASH PAID:mohan 1075 BANGALORE-BELLANDUR VILLAGE 20,000.00 4,95,733.08',
     '24-10-2019 CHEQUE 7052 CLG/V PRAVEEN RAM/YES 14,000.00 4,81,733.08',
     '25-10-2019 CHEQUE 7051 CLG/BESCOM S/UTI 17,385.00 4,64,348.08',
     '30-10-2019 107510010791I0 Int on FD/RD XXX0791 Tds:0.Int:8625 and TAX:0. 8,625.00 4,72,973.08',
     '31-10-2019 CHEQUE 7055 CLG/ADVANCE ENGINEERING CORPORATION/HSB 14,337.00 4,58,636.08']
    l2=[]
    
    #splitting values based on '/'
    for i in l1:
        l2.append(i.split('/'))
    
    #printing values from sublists of l2    
    for j in l2:
        for k in j:
            print(k)
    

    输出:

    15-10-2019 BIL
    INFT
    001823982708
    Block2B5
     MAHAK JUNEJA 5,130.00 5,19,319.08
    15-10-2019 BIL
    INFT
    001824120963
    watermaintoct
     AAANKSHA AGRAWA 3,895.00 5,23,214.08
    15-10-2019 MOBILE BANKING MMT
    IMPS
    928820560895
    VURIMI UMA
    AXIS BANK LTD 5,201.00 5,28,415.08
    15-10-2019 MOBILE BANKING MMT
    IMPS
    928820342293
    B1H2
    KAVURI KIS
    HDFC BANK LTD 3,401.00 5,31,816.08
    15-10-2019 SE EER TRS 2 Malntenen eee guna. Shula HEEGBAME 3,732.00 5,35,548.08
    16-10-2019 CHEQUE 7048 CLG
    ZAP POWER SYSTEMS
    UBI 16,815.00 5,18,733.08
    17-10-2019 MOBILE BANKING NANCE ee osnesiBers GGRA fee
    VOONA SRIN
    HDFC 500.00 5,19,233.08
    18-10-2019 CHEQUE 7049 CLG
    BANGALORE APARTMENTS FED
    SBI 3,500.00 5,15,733.08
    21-10-2019 CHEQUE 7054 CASH PAID:mohan 1075 BANGALORE-BELLANDUR VILLAGE 20,000.00 4,95,733.08
    24-10-2019 CHEQUE 7052 CLG
    V PRAVEEN RAM
    YES 14,000.00 4,81,733.08
    25-10-2019 CHEQUE 7051 CLG
    BESCOM S
    UTI 17,385.00 4,64,348.08
    30-10-2019 107510010791I0 Int on FD
    RD XXX0791 Tds:0.Int:8625 and TAX:0. 8,625.00 4,72,973.08
    31-10-2019 CHEQUE 7055 CLG
    ADVANCE ENGINEERING CORPORATION
    HSB 14,337.00 4,58,636.08
    

    【讨论】:

    • 刚刚编辑了问题以说明我期望的 putput 类型
    • 您的数据每次都不包含名称或其他参数,因此无法按您的意愿排序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2018-05-05
    • 1970-01-01
    • 2019-12-22
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多