使用正则表达式从 txt 中提取数据 [关闭]
Posted
技术标签:
【中文标题】使用正则表达式从 txt 中提取数据 [关闭]【英文标题】:Extract data from txt with regex [closed] 【发布时间】:2021-02-07 22:47:12 【问题描述】:我刚刚使用 Google Vision API 将 pdf 收据转换为 txt 文件。现在我想提取 4 个特定字段并将它们保存在一个新的 txt 文件中。
我突出显示了 2 个我想提取的项目示例
黄色:产品 ID ;绿色:数量 ;蓝色:单价 ;红色:产品说明
这是一段文本文件:
['等待操作完成。\n', '输出文件:\n', 'receipts/factura_lider.txtoutput-1-to-1.json\n', '全文:\n', '\n', '管理员。 DE SUPERMERCADOS HIPER\n', 'LIMITADA\n', '76.134.941-4\n', 'Hiper\n', 'LIDER\n', 'GRANDES ESTABLECIMIENTOS-VENTA DE\n', 'ALIM.\n ', 'BOLETA ELECTRÓNICA N° : 1680178292\n', '本地:\n', '0682\n', 'CAJA:\n', '020\n', 'CAJERO:\n', '163 \n', 'FECHA 排放:\n', '20-10-2020\n', 'HORA:\n', '09:07\n', 'TRAN. Nº:\n', '0018\n', 'CANT.\n', 'PRECIO UNIT.\n', 'DESC. ARTICULO\n', 'VALOR\n', '2.150\n', '4.511\n', '1.690\n', '5.990\n', '1.990\n', '1.190\n', '309\ n', '2.490\n', '4.290\n', '2.650\n', '2.290\n', '4.500\n', '3.840\n', '1.416\n', 'CODIGO: 07803473002662\ n', '1.0x 2.150 ID PAN BLA G\n', 'CODIGO: 02069600000009\n', '0.515x 8.759 PAVO PECHUGA\n', 'CODIGO: 00078742086811\n', '1.0X 1.690 MARGARIN REG\n' , 'CODIGO: 07613036150521\n', '1.0X 5.990 BUEN DIA 1.1\n', 'CODIGO: 07804115001838\n', '1.0x 1.990 AZ-MOL TR PA\n', 'CODIGO: 07802920801704\n',' 1.0 1.190 YOGHURT DAMA\n', 'CODIGO: 07804646490194\n', '1.0x 309 CILANTRO BOL\n', 'CODIGO: 00614143030932\n', '1.0x 2.490 FRUTOS BOS\n', 'CODIGO: 07804108\n' ', '1.0x 4.290 PACK HUEVO M\n', 'CODIGO: 07801930000 602\n', '1.0x 2.650 PANCETAPF\n', 'CODIGO: 07804152000283\n', '1.0x 2.290 NARANJA 1.5\n', ' CODIGO: 07805000183080\n', '1.0X 4.500 DET.LQ.DPLIR\n', 'CODIGO: 02164730000001\n', '2.415X 1.590 POLLO ENTERO\n', 'CODIGO: 02000140000005\n', '1. PLATANO\n', 'CODIGO: 07804653341021\n', '1.0X 1. 000 PHX6\n', 'CODIGO: 07802655002230\n', '1.0x 830 HARINA S/POL\n',
【问题讨论】:
【参考方案1】:import re
text = '''['Waiting for the operation to finish.\n', 'Output files:\n', 'receipts/factura_lider.txtoutput-1-to-1.json\n', 'Full text:\n', '\n', 'ADMIN. DE SUPERMERCADOS HIPER\n', 'LIMITADA\n', '76.134.941-4\n', 'Hiper\n', 'LIDER\n', 'GRANDES ESTABLECIMIENTOS-VENTA DE\n', 'ALIM.\n', 'BOLETA ELECTRÓNICA N° : 1680178292\n', 'LOCAL:\n', '0682\n', 'CAJA:\n', '020\n', 'CAJERO:\n', '163\n', 'FECHA EMISION:\n', '20-10-2020\n', 'HORA:\n', '09:07\n', 'TRAN. Nº:\n', '0018\n', 'CANT.\n', 'PRECIO UNIT.\n', 'DESC. ARTICULO\n', 'VALOR\n', '2.150\n', '4.511\n', '1.690\n', '5.990\n', '1.990\n', '1.190\n', '309\n', '2.490\n', '4.290\n', '2.650\n', '2.290\n', '4.500\n', '3.840\n', '1.416\n', 'CODIGO: 07803473002662\n', '1.0x 2.150 ID PAN BLA G\n', 'CODIGO: 02069600000009\n', '0.515x 8.759 PAVO PECHUGA\n', 'CODIGO: 00078742086811\n', '1.0X 1.690 MARGARIN REG\n', 'CODIGO: 07613036150521\n', '1.0X 5.990 BUEN DIA 1.1\n', 'CODIGO: 07804115001838\n', '1.0x 1.990 AZ-MOL TR PA\n', 'CODIGO: 07802920801704\n', '1.0 1.190 YOGHURT DAMA\n', 'CODIGO: 07804646490194\n', '1.0x 309 CILANTRO BOL\n', 'CODIGO: 00614143030932\n', '1.0x 2.490 FRUTOS BOS\n', 'CODIGO: 07804100103158\n', '1.0x 4.290 PACK HUEVO M\n', 'CODIGO: 07801930000 602\n', '1.0x 2.650 PANCETAPF\n', 'CODIGO: 07804152000283\n', '1.0x 2.290 NARANJA 1.5\n', 'CODIGO: 07805000183080\n', '1.0X 4.500 DET.LQ.DPLIR\n', 'CODIGO: 02164730000001\n', '2.415X 1.590 POLLO ENTERO\n', 'CODIGO: 02000140000005\n', '1.43% 990 PLATANO\n', 'CODIGO: 07804653341021\n', '1.0X 1.000 PHX6\n', 'CODIGO: 07802655002230\n', '1.0x 830 HARINA S/POL\n'
'''
Product = re.search('CODIGO:(.*?)\n\', \'(.*?)\n', text, re.DOTALL)
product_ID = Product.group(1)
q_up_pd_str = Product.group(2).split()
quantity = q_up_pd_str[0]
unit_price = q_up_pd_str[1]
product_description = ' '.join(q_up_pd_str[2:])
print(product_ID)
print(quantity)
print(unit_price)
print(product_description)
【讨论】:
非常感谢@Aaj Kaal 我运行了代码并确定了第一个项目07803473002662 1.0x 2.150 ID PAN BLA G
现在的挑战是能够提取文本中存在的所有项目。不只是第一次出现,我客人我应该尝试一个 for 循环。欢迎任何建议以上是关于使用正则表达式从 txt 中提取数据 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章