regex 如何用正则表达式动态提取文本前的数字?

gblwokeq  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(163)

我有一个正则表达式函数,它可以在文本之前提取数字。但是我现在用硬编码文本来做。
但是否也可以提取数字而不考虑文本。
所以我有这个例子字符串:

text = "[' \n\na)\n\n \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. : 71201 Koopliedenweg 33\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 10-12-21\nAantal Omschrijving Prijs Bedrag\nOrder number : 77553 Loading date : 09-12-21 Incoterm: : FOT\nYour ref. : SCHOOLFRUIT Delivery date :\nWK50\nD.C. Schoolfruit\n16 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 123,20\n360 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 2.772,00\n6 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,/0 € 46,20\n75  Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 577,50\n9 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 69,30\n688 Appels Royal Gala 13kg 60/65 Generica PL I € 5,07 € 3.488,16\n22  Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 137,50\n80 Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 500,00\n160 Sinaasappels Valencias 15kg 105 FVC ZAI € 6,25 € 1.000,00\n320 Sinaasappels Valencias 15kg 105 Generica ZAI € 6,25 € 2.000,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 1.000,00\n61  Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 381,25\nTotaal Colli Totaal Netto Btw Btw Bedrag Totaal Bedrag\n€ 12.095,11 1.088,56\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\nVerDi Import BV ING Bank NV. Rotterdam IBAN number: NL17INGB0006959173 ~~\n\n \n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 i\nTel, +31 (0}1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no. 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nrut ard wegetables\n\x0c']"

我用这个作为搜索词:

fruit_words = ['Appels', 'Ananas', 'Peen Waspeen',
               'Tomaten Cherry', 'Sinaasappels',
               'Watermeloenen', 'Rettich']

这是正则表达式:

regex =  r"(\d*(?:\.\d+)*)\s*(?:" + '|'.join(re.escape(word)
                                            for word in fruit_words) + ')'

number_found = re.findall(regex, verdi3)
print(number_found)

输出如下:

['16', '360', '6', '75', '9', '688', '22', '80', '160', '320', '160', '61']

我的问题:有没有可能有相同的输出,但没有水果_单词?
或者没有正则表达式的mabye?
谢谢你
问题是,如果我有这个字符串,其他的事实,但是结构相同。

text2 = "['A)\n\nFactuur\n\nFactuur nr.\nDeb. nr.\nYour VAT nr.\n\nFactuur datum\n\n72459\n\n108636\nNL851703884B01\n11-01-22\n\nAantal Omschrijving\n\nOrder number\n\nYour ref,\n\nD.C. Schoolfruit\n\n79005 Loading date\nSCHOOLFRUIT Delivery date\nWKO2\n\n782 Peen Breek peen 10xikg B Rabbit NLI\n138 Mandarijnen Clementinas 10kg 3-140 Black MAI\n450 Mandarijnen Clementinas 10kg 3-140 Black MAI\n486 Sinaasappels Navels 15kg 6-90 Gloriosa MAI\n\n60 Sinaasappels Navels 15kg 6-90 Gloriosa MA I\n\nVerDi\nVerDi\nVerDi\n\nTotaal Colli\n\n1.916\n\nVerDi Import BV\n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25\nE-mail: sales@verdiimport.nl, www.verdiimport.nl\n\nMidden Zuid Noord\nMandarijn 195 158 235\nWortel 202 164 416\nSinaas 302 244 0\n\nTotaal Netto\n\n€ 12.474,40\n\nVerdi Import Schoolfruit\nKoopliedenweg 38\n2991 LN BARENDRECHT\n\nNederland\nPrijs\n\n10-01-22 Incoterm: : FOT\n€ 4,70\n€ 8,00\n€ 8,00\n€ 7,50\n€ 7,50\n\n588\n\n782\n\n546\n\nBtw Btw Bedrag\n\nBedrag\n\n€ 3.675,40\n€ 1.104,00\n€  3.600,00\n€ 3.645,00\n€ 450,00\n\nTotaal Bedrag\n\n€ 1.122,70 € 13.597,10\n\n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173\n\nSWIFT/BIC: INGBNL2A, VAT number: NL851703884B01\nChamber of Commerce Rotterdam no, 55424309\nDutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nSas?\nVerDi\n\nfruit and vegetables\n\x0c']"

然后输出如下:

['72459', '108636', '11-01-22', '79005', '782', '138', '450', '486', '60', '1.916', '2991', '10-01-22', '588', '782', '546']

当然是错的。因为我只想在水果排序之前的数字,所以举个例子:

522 Sinaasappels Navelinas 15kg

不包括带有.的数字。类似于以下字符串:

text3 = '["a(S (>)\n\n \n\n  \n \n\n \n\n \n\n   \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. + 71257 Koopliedenweg 38\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 13-12-21\nAantal Omschrijving Prijs Bedrag\nOrdernumber : 76929 Loading date : 29-11-21 Incoterm: : FOT\nYour ref, : Delivery date :\nD.C. Schoolfruit\n705 Appels Royal Gala 13kq 60/65 Generica PL I € 4,68 € 3.299,40\nOrder number : 76643 Loading date : 25-11-21 Incoterm: : FRA\nYour ref. : Delivery date\nD.C, Schoolfruit\n1.712 Tomaten Cherry pruim 4kg Los Cherie MA I € 2,25 € 3.852,00\n80 Sinaasappels Midnights 15kg 105 BIG 5 ZAI € 6,50 € 520,00\n240 Sinaasappels Midnights 15kg 105 Noordhoek ZAI € 6,50 € 1.560,00\n8 Sinaasappels Valencias 15kg 105 Limpopo ZAI € 6,50 € 52,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 1.040,00\n320 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 2.080,00\nSINAAS:\nMIDDEN 267 pcm\nNOORD 325 2%; oe\nZUID 216 PARTUNUMMER\nTOTAAL: 808 | DATUN Bi r|\nCHERRY:\nMIDDEN 564\nNOORD 693\nZUID 455\nTOTAAL: 1712 ee\nBETALING\nTotaal Colli Totaal Bedrag\n\n    \n \n \n\n€ 13.519,71\n\n \n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nails,\nVerDi Import BV ING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173 —\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 a\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no, 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction,\n\nfret and vegetan"]'

我试着用这段文字:

verdi48 = '["a(S (>)\n\n \n\n  \n \n\n \n\n \n\n   \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. + 71257 Koopliedenweg 38\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 13-12-21\nAantal Omschrijving Prijs Bedrag\nOrdernumber : 76929 Loading date : 29-11-21 Incoterm: : FOT\nYour ref, : Delivery date :\nD.C. Schoolfruit\n705 Appels Royal Gala 13kq 60/65 Generica PL I € 4,68 € 3.299,40\nOrder number : 76643 Loading date : 25-11-21 Incoterm: : FRA\nYour ref. : Delivery date\nD.C, Schoolfruit\n1.712 Tomaten Cherry pruim 4kg Los Cherie MA I € 2,25 € 3.852,00\n80 Sinaasappels Midnights 15kg 105 BIG 5 ZAI € 6,50 € 520,00\n240 Sinaasappels Midnights 15kg 105 Noordhoek ZAI € 6,50 € 1.560,00\n8 Sinaasappels Valencias 15kg 105 Limpopo ZAI € 6,50 € 52,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 1.040,00\n320 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 2.080,00\nSINAAS:\nMIDDEN 267 pcm\nNOORD 325 2%; oe\nZUID 216 PARTUNUMMER\nTOTAAL: 808 | DATUN Bi r|\nCHERRY:\nMIDDEN 564\nNOORD 693\nZUID 455\nTOTAAL: 1712 ee\nBETALING\nTotaal Colli Totaal Bedrag\n\n    \n \n \n\n€ 13.519,71\n\n \n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nails,\nVerDi Import BV ING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173 —\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 a\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no, 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction,\n\nfret and vegetan"]'

但这行不通。
我得到100倍没有匹配。
字符串如下:

text4 = '["a(S (>)\n\n \n\n  \n \n\n \n\n \n\n   \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. + 71257 Koopliedenweg 38\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 13-12-21\nAantal Omschrijving Prijs Bedrag\nOrdernumber : 76929 Loading date : 29-11-21 Incoterm: : FOT\nYour ref, : Delivery date :\nD.C. Schoolfruit\n705 Appels Royal Gala 13kq 60/65 Generica PL I € 4,68 € 3.299,40\nOrder number : 76643 Loading date : 25-11-21 Incoterm: : FRA\nYour ref. : Delivery date\nD.C, Schoolfruit\n1.712 Tomaten Cherry pruim 4kg Los Cherie MA I € 2,25 € 3.852,00\n80 Sinaasappels Midnights 15kg 105 BIG 5 ZAI € 6,50 € 520,00\n240 Sinaasappels Midnights 15kg 105 Noordhoek ZAI € 6,50 € 1.560,00\n8 Sinaasappels Valencias 15kg 105 Limpopo ZAI € 6,50 € 52,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 1.040,00\n320 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 2.080,00\nSINAAS:\nMIDDEN 267 pcm\nNOORD 325 2%; oe\nZUID 216 PARTUNUMMER\nTOTAAL: 808 | DATUN Bi r|\nCHERRY:\nMIDDEN 564\nNOORD 693\nZUID 455\nTOTAAL: 1712 ee\nBETALING\nTotaal Colli Totaal Bedrag\n\n    \n \n \n\n€ 13.519,71\n\n \n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nails,\nVerDi Import BV ING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173 —\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 a\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no, 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction,\n\nfret and vegetan"]'

然后它会打印以下内容:

['705', '80', '240', '8', '160', '320']

它缺少了数字:1.712
如果我有这个字符串:

verdi2 = "['A)\n\nFactuur\n\nFactuur nr.\nDeb. nr.\nYour VAT nr.\n\nFactuur datum\n\n72459\n\n108636\nNL851703884B01\n11-01-22\n\nAantal Omschrijving\n\nOrder number\n\nYour ref,\n\nD.C. Schoolfruit\n\n79005 Loading date\nSCHOOLFRUIT Delivery date\nWKO2\n\n782 Peen Breek peen 10xikg B Rabbit NLI\n138 Mandarijnen Clementinas 10kg 3-140 Black MAI\n450 Mandarijnen Clementinas 10kg 3-140 Black MAI\n486 Sinaasappels Navels 15kg 6-90 Gloriosa MAI\n\n60 Sinaasappels Navels 15kg 6-90 Gloriosa MA I\n\nVerDi\nVerDi\nVerDi\n\nTotaal Colli\n\n1.916\n\nVerDi Import BV\n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25\nE-mail: sales@verdiimport.nl, www.verdiimport.nl\n\nMidden Zuid Noord\nMandarijn 195 158 235\nWortel 202 164 416\nSinaas 302 244 0\n\nTotaal Netto\n\n€ 12.474,40\n\nVerdi Import Schoolfruit\nKoopliedenweg 38\n2991 LN BARENDRECHT\n\nNederland\nPrijs\n\n10-01-22 Incoterm: : FOT\n€ 4,70\n€ 8,00\n€ 8,00\n€ 7,50\n€ 7,50\n\n588\n\n782\n\n546\n\nBtw Btw Bedrag\n\nBedrag\n\n€ 3.675,40\n€ 1.104,00\n€  3.600,00\n€ 3.645,00\n€ 450,00\n\nTotaal Bedrag\n\n€ 1.122,70 € 13.597,10\n\n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173\n\nSWIFT/BIC: INGBNL2A, VAT number: NL851703884B01\nChamber of Commerce Rotterdam no, 55424309\nDutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nSas?\nVerDi\n\nfruit and vegetables\n\x0c']"

然后它也会返回事实数字。什么不一定是。
只有数字后面带水果的数字才需要返回。因此,带€的行。

nnsrf1az

nnsrf1az1#

一种不使用正则表达式的方法。首先,我们将文本剪切为\n,因为我们需要的所有数字都在新的一行开始。然后,我们丢弃那些不以数字开头的元素。接下来,我们将剩余的元素剪切为空格,得到数字。
第一个

fgw7neuy

fgw7neuy2#

使用(?si)SCHOOLFRUIT(?:(?!SCHOOLFRUIT).)*?Totaal Colli可以提取SCHOOLFRUIT Delivery dateTotaal Colli之间的所有文本块(请参见this regex),然后使用(?m)^\d+提取每行开头的所有数字(其中^匹配任何行开始位置并且\d+(?:\.\d+)?匹配一个或多个数字,即匹配整型或浮点型)。
请参阅this Python demo

import re
texts = [
    "[' \n\na)\n\n \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. : 71201 Koopliedenweg 33\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 10-12-21\nAantal Omschrijving Prijs Bedrag\nOrder number : 77553 Loading date : 09-12-21 Incoterm: : FOT\nYour ref. : SCHOOLFRUIT Delivery date :\nWK50\nD.C. Schoolfruit\n16 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 123,20\n360 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 2.772,00\n6 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,/0 € 46,20\n75  Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 577,50\n9 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 69,30\n688 Appels Royal Gala 13kg 60/65 Generica PL I € 5,07 € 3.488,16\n22  Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 137,50\n80 Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 500,00\n160 Sinaasappels Valencias 15kg 105 FVC ZAI € 6,25 € 1.000,00\n320 Sinaasappels Valencias 15kg 105 Generica ZAI € 6,25 € 2.000,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 1.000,00\n61  Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 381,25\nTotaal Colli Totaal Netto Btw Btw Bedrag Totaal Bedrag\n€ 12.095,11 1.088,56\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\nVerDi Import BV ING Bank NV. Rotterdam IBAN number: NL17INGB0006959173 ~~\n\n \n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 i\nTel, +31 (0}1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no. 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nrut ard wegetables\n\x0c']",
    "['A)\n\nFactuur\n\nFactuur nr.\nDeb. nr.\nYour VAT nr.\n\nFactuur datum\n\n72459\n\n108636\nNL851703884B01\n11-01-22\n\nAantal Omschrijving\n\nOrder number\n\nYour ref,\n\nD.C. Schoolfruit\n\n79005 Loading date\nSCHOOLFRUIT Delivery date\nWKO2\n\n782 Peen Breek peen 10xikg B Rabbit NLI\n138 Mandarijnen Clementinas 10kg 3-140 Black MAI\n450 Mandarijnen Clementinas 10kg 3-140 Black MAI\n486 Sinaasappels Navels 15kg 6-90 Gloriosa MAI\n\n60 Sinaasappels Navels 15kg 6-90 Gloriosa MA I\n\nVerDi\nVerDi\nVerDi\n\nTotaal Colli\n\n1.916\n\nVerDi Import BV\n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25\nE-mail: sales@verdiimport.nl, www.verdiimport.nl\n\nMidden Zuid Noord\nMandarijn 195 158 235\nWortel 202 164 416\nSinaas 302 244 0\n\nTotaal Netto\n\n€ 12.474,40\n\nVerdi Import Schoolfruit\nKoopliedenweg 38\n2991 LN BARENDRECHT\n\nNederland\nPrijs\n\n10-01-22 Incoterm: : FOT\n€ 4,70\n€ 8,00\n€ 8,00\n€ 7,50\n€ 7,50\n\n588\n\n782\n\n546\n\nBtw Btw Bedrag\n\nBedrag\n\n€ 3.675,40\n€ 1.104,00\n€  3.600,00\n€ 3.645,00\n€ 450,00\n\nTotaal Bedrag\n\n€ 1.122,70 € 13.597,10\n\n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173\n\nSWIFT/BIC: INGBNL2A, VAT number: NL851703884B01\nChamber of Commerce Rotterdam no, 55424309\nDutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nSas?\nVerDi\n\nfruit and vegetables\n\x0c']",
    '["a(S (>)\n\n \n\n  \n \n\n \n\n \n\n   \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. + 71257 Koopliedenweg 38\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 13-12-21\nAantal Omschrijving Prijs Bedrag\nOrdernumber : 76929 Loading date : 29-11-21 Incoterm: : FOT\nYour ref, : Delivery date :\nD.C. Schoolfruit\n705 Appels Royal Gala 13kq 60/65 Generica PL I € 4,68 € 3.299,40\nOrder number : 76643 Loading date : 25-11-21 Incoterm: : FRA\nYour ref. : Delivery date\nD.C, Schoolfruit\n1.712 Tomaten Cherry pruim 4kg Los Cherie MA I € 2,25 € 3.852,00\n80 Sinaasappels Midnights 15kg 105 BIG 5 ZAI € 6,50 € 520,00\n240 Sinaasappels Midnights 15kg 105 Noordhoek ZAI € 6,50 € 1.560,00\n8 Sinaasappels Valencias 15kg 105 Limpopo ZAI € 6,50 € 52,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 1.040,00\n320 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 2.080,00\nSINAAS:\nMIDDEN 267 pcm\nNOORD 325 2%; oe\nZUID 216 PARTUNUMMER\nTOTAAL: 808 | DATUN Bi r|\nCHERRY:\nMIDDEN 564\nNOORD 693\nZUID 455\nTOTAAL: 1712 ee\nBETALING\nTotaal Colli Totaal Bedrag\n\n    \n \n \n\n€ 13.519,71\n\n \n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nails,\nVerDi Import BV ING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173 —\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 a\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no, 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction,\n\nfret and vegetan"]',
    '["a(S (>)\n\n \n\n  \n \n\n \n\n \n\n   \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. + 71257 Koopliedenweg 38\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 13-12-21\nAantal Omschrijving Prijs Bedrag\nOrdernumber : 76929 Loading date : 29-11-21 Incoterm: : FOT\nYour ref, : Delivery date :\nD.C. Schoolfruit\n705 Appels Royal Gala 13kq 60/65 Generica PL I € 4,68 € 3.299,40\nOrder number : 76643 Loading date : 25-11-21 Incoterm: : FRA\nYour ref. : Delivery date\nD.C, Schoolfruit\n1.712 Tomaten Cherry pruim 4kg Los Cherie MA I € 2,25 € 3.852,00\n80 Sinaasappels Midnights 15kg 105 BIG 5 ZAI € 6,50 € 520,00\n240 Sinaasappels Midnights 15kg 105 Noordhoek ZAI € 6,50 € 1.560,00\n8 Sinaasappels Valencias 15kg 105 Limpopo ZAI € 6,50 € 52,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 1.040,00\n320 Sinaasappels Valencias 15kg 105 Noordhoek ZAI € 6,50 € 2.080,00\nSINAAS:\nMIDDEN 267 pcm\nNOORD 325 2%; oe\nZUID 216 PARTUNUMMER\nTOTAAL: 808 | DATUN Bi r|\nCHERRY:\nMIDDEN 564\nNOORD 693\nZUID 455\nTOTAAL: 1712 ee\nBETALING\nTotaal Colli Totaal Bedrag\n\n    \n \n \n\n€ 13.519,71\n\n \n \n\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\n\nails,\nVerDi Import BV ING Bank N.V. Rotterdam IBAN number: NL17INGB0006959173 —\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 a\nTel. +31 (0)1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no, 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction,\n\nfret and vegetan"]'
]
for text in texts:
    blocks = re.search(r'SCHOOLFRUIT(?:(?!SCHOOLFRUIT).)*?Totaal Colli', text, re.S|re.I)
    if blocks:
        number_found = re.findall(r'^\d+(?:\.\d+)?', blocks.group(), re.M)
        print(number_found)
    else:
        print("No matches!")

['16', '360', '6', '75', '9', '688', '22', '80', '160', '320', '160', '61']
['782', '138', '450', '486', '60']
['1.712', '80', '240', '8', '160', '320']
['1.712', '80', '240', '8', '160', '320']

正则表达式说明

  • (?si)SCHOOLFRUIT(?:(?!SCHOOLFRUIT).)*?Totaal Colli
  • (?si)-re.Ire.S标志打开(i = re.I使搜索不区分大小写,s = re.S使.匹配换行符)
  • SCHOOLFRUIT-常值文字
  • (?:(?!SCHOOLFRUIT).)*?-一个字符,不以SCHOOLFRUIT字符序列开头,可以不出现,也可以不出现,但出现次数越少越好
  • Totaal Colli-常值文字
  • (?m)^\d+(?:\.\d+)?
  • (?m) = re.M-^锚现在匹配任何行的开头,而不仅仅是字符串的开头位置
  • ^-行的开始
  • \d+-一个或多个数字
  • (?:\.\d+)?-与.和一个或多个数字匹配的可选非捕获组。
2mbi3lxu

2mbi3lxu3#

删除不再需要的正则表达式

text = "[' \n\na)\n\n \n\nFactuur\nVerdi Import Schoolfruit\nFactuur nr. : 71201 Koopliedenweg 33\nDeb. nr. : 108636 2991 LN BARENDRECHT\nYour VAT nr. : NL851703884B01 Nederland\nFactuur datum : 10-12-21\nAantal Omschrijving Prijs Bedrag\nOrder number : 77553 Loading date : 09-12-21 Incoterm: : FOT\nYour ref. : SCHOOLFRUIT Delivery date :\nWK50\nD.C. Schoolfruit\n16 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 123,20\n360 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 2.772,00\n6 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,/0 € 46,20\n75  Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 577,50\n9 Watermeloenen Quetzali 16kg 4 IMPERIAL BR I € 7,70 € 69,30\n688 Appels Royal Gala 13kg 60/65 Generica PL I € 5,07 € 3.488,16\n22  Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 137,50\n80 Sinaasappels Valencias 15kg 105 Elara ZAI € 6,25 € 500,00\n160 Sinaasappels Valencias 15kg 105 FVC ZAI € 6,25 € 1.000,00\n320 Sinaasappels Valencias 15kg 105 Generica ZAI € 6,25 € 2.000,00\n160 Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 1.000,00\n61  Sinaasappels Valencias 15kg 105 Noordhoek ZA I € 6,25 € 381,25\nTotaal Colli Totaal Netto Btw Btw Bedrag Totaal Bedrag\n€ 12.095,11 1.088,56\nBetaling binnen 30 dagen\nAchterstand wordt gemeld bij de kredietverzekeringsmaatschappij\nVerDi Import BV ING Bank NV. Rotterdam IBAN number: NL17INGB0006959173 ~~\n\n \n\nKoopliedenweg 38, 2991 LN Barendrecht, The Netherlands SWIFT/BIC: INGBNL2A, VAT number: NL851703884B01 i\nTel, +31 (0}1 80 61 88 11, Fax +31 (0)1 8061 88 25 Chamber of Commerce Rotterdam no. 55424309 VerDi\n\nE-mail: sales@verdiimport.nl, www.verdiimport.nl Dutch law shall apply. The Rotterdam District Court shall have exclusive jurisdiction.\n\nrut ard wegetables\n\x0c']"

您的输入看起来像一张发票,并且大多数发票在列出项目之前都有一个开始和结束。在这种情况下[不确定,如果我能再得到一个示例,我可以回答得更好]“D.C. Schoolfruit”将作为开始,“Totaal”将作为结束。用“\n”拆分后放入循环并且在开始到结束之后获取行应该会给予你发票中所有项目的列表。希望这对你有帮助。

相关问题