简体   繁体   中英

Multiple matches regex positive lookahead

I'm struggling to create a regex pattern for my scraping backend. I want to create an array of day menus (Monday-Friday). For each match (day) I want to maintain date and listed meals. So far I have created:

\d+\.\d+\.\d+([\s\S]*?)(\d+\.\d+\.\d+|X)

Issues with my pattern:

  1. I'm not able to create a pattern which will not include next day date
  2. The issue above is causing the problem when date is included in the previous match
  3. I do not know how to express the end of the string for Friday (X atm)

EDIT: It is for Javascript

Pondělí
                                31.8.2020
                            
                        Každý všední den 11:00 - 15:00

                    Polévka:
                                0,25l Zeleninová polévka se smetanou (7,9)
                            
                                20,-
                            
                                0,25l Kapustová s klobásou 
                            
                                20,-
                            1150g Grilovaná kuřecí prsa s citronovým kuskusem se zeleninou (1,9)
                                
                                    
                                        109,-
                                    
                                2150g Uzená kýta se smetanovou omáčkou s křenem, kynutý knedlík (1,3,7)
                                
                                    
                                        99,-
                                    
                                3300g Strozzapreti se sýrovou omáčkou, ořechy a kousky kuřecích prs (1,3,7,8)
                                
                                    
                                        109,-
                                    
                                4250g Cizrna na zelenině, curry koření, kokosovém mléce a koriandru s bulgurem s dýňovými semínky (1)
                                
                                    
                                        99,-
                                    
                                5250g Hot dog s vídeňskými párky, fazolový salát, hořčicová majonéza, rukola, hranolky (1,3,10)
                                
                                    
                                        119,-
                                    
                                6250g Listový salát s okurkem, rajčetem, barevnou paprikou, do růžova grilovanou vepřovou panenkou, hořčično-medový dresing (10,12)
                                
                                    
                                        119,-
                                    
                                Úterý
                                1.9.2020
                            
                        Každý všední den 11:00 - 15:00
.
                    Polévka:
                                0,25l Bramborový krém s brynzou (7)
                            
                                20,-
                            
                                0,25l Slepičí vývar s masem, zeleninou a nudlemi (1,3,9)
                            
                                20,-
                            1150g Kuřecí steak se zeleninou na másle, bramborová kaše (7,9)
                                
                                    
                                        99,-
                                    
                                2150g Hovězí tokáň s divokou rýží (12)
                                
                                    
                                        109,-
                                    
                                3300g Parmazánové risotto s karamelovou cibulí, kousky vepřové panenky, rukola (7)
                                
                                    
                                        109,-
                                    
                                4150g Čočková sekaná s uzeným tofu, bramborová kaše se sójovým mlékem, okurek (1,3,6,12)        
                                
                                    
                                        109,-
                                    
                                5250g Hot dog s vídeňskými párky, fazolový salát, hořčicová majonéza, rukola, hranolky (1,3,10)
                                
                                    
                                        119,-
                                    
                                6250g Listový salát s okurkem, rajčetem, barevnou paprikou, do růžova grilovanou vepřovou panenkou, hořčično-medový dresing (10,12)
                                
                                    
                                        119,-
                                    
                                Středa
                                2.9.2020
                            
                        Každý všední den 11:00 - 15:00
.
                    Polévka:
                                0,25l Hovězí vývar s masem, zeleninou a nudlemi (1,3,9)
                            
                                20,-
                            
                                0,25l Krém z dýně, mrkve a červeného kari s kokosovým mlékem
                            
                                20,-
                            1150g Burger s vepřovým trhaným masem v BBQ, coleslaw, čedar, hranolky (1,3,6,7,10,11,12,13)
                                
                                    
                                        129,-
                                    
                                2150g Vepřová líčka na černém pivě a jablkách, šťouchaný brambor (1) 
                                
                                    
                                        109,-
                                    
                                3300g Orecchiette s krůtím ragú na zelenině a rajčatech se sušenými houbami, parmazán (1,3,7,9)
                                
                                    
                                        109,-
                                    
                                4250g Bramborový gratin s dýní, listový salát (3,7)
                                
                                    
                                        99,-
                                    
                                5250g Hot dog s vídeňskými párky, fazolový salát, hořčicová majonéza, rukola, hranolky (1,3,10)
                                
                                    
                                        119,-
                                    
                                6250g Listový salát s okurkem, rajčetem, barevnou paprikou, do růžova grilovanou vepřovou panenkou, hořčično-medový dresing (10,12)
                                
                                    
                                        119,-
                                    
                                Čtvrtek
                                3.9.2020
                            
                        Každý všední den 11:00 - 15:00
.
                    Polévka:
                                0,25l Frankfurtská s párkem (7)
                            
                                20,-
                            
                                0,25l Hráškový krém s mátou (7)
                            
                                20,-
                            1150g Vepřová krkovice alla porchetta, šťouchaný brambor se zakysanou smetanou (7,12)
                                
                                    
                                        109,-
                                    
                                2150g Kuřecí nudličky s uzenou paprikou, rajčaty a cizrnou, jasmínová rýže 
                                
                                    
                                        99,-
                                    
                                3300g Spaghetti „Amatriciana“ (červená cibule, pancetta, tomatová om., česnek, chilli), parmazán (1,3,7)
                                
                                    
                                        109,-
                                    
                                4250g Mexické černé fazole se zeleninou a kukuřicí, tortila, pikantní dip salsa verde (1,7,9)
                                
                                    
                                        99,-
                                    
                                5250g Hot dog s vídeňskými párky, fazolový salát, hořčicová majonéza, rukola, hranolky (1,3,10)
                                
                                    
                                        119,-
                                    
                                6250g Listový salát s okurkem, rajčetem, barevnou paprikou, do růžova grilovanou vepřovou panenkou, hořčično-medový dresing (10,12)
                                
                                    
                                        119,-
                                    
                                Pátek
                                4.9.2020
                            
                        Každý všední den 11:00 - 15:00
.
                    Polévka:
                                0,25l Česneková se zeleninou a kroupami, uzené maso (1,9)
                            
                                20,-
                            
                                0,25l Fenyklová 
                            
                                20,-
                            1150g Smažený sýr se šunkou, vařené brambory, tatarská omáčka (1,3,7,10,12)
                                
                                    
                                        99,-
                                    
                                2150g Dušený vepřový plátek s okurkou, vejcem a párkem, jasmínová rýže (3,12)
                                
                                    
                                        99,-
                                    
                                3300g Penne s cuketovou omáčkou se slaninou, sušená rajčata, parmazán, polníček (1,3,7)
                                
                                    
                                        109,-
                                    
                                4250g Šumavský toč (kynutá bramborová buchta), houbové soté (1,3,7)
                                
                                    
                                        99,-
                                    
                                5250g Hot dog s vídeňskými párky, fazolový salát, hořčicová majonéza, rukola, hranolky (1,3,10)
                                
                                    
                                        119,-
                                    
                                6250g Listový salát s okurkem, rajčetem, barevnou paprikou, do růžova grilovanou vepřovou panenkou, hořčično-medový dresing (10,12)
                                
                                    
                                        119,-

Thank you in advance!

To get the day, date and the menu's, you can use 3 capturing groups:

(\S+)\s+(\d{1,2}\.\d{1,2}\.\d{4}.*)((?:\r?\n(?![^\S\r\n]*\S+\s*\d{1,2}\.\d{1,2}\.{4}).*)*)

The pattern will match

  • (\\S+) Capture group 1 , match 1+ non whitespace chars
  • \\s+ Match 1+ whitespace chars
  • ( Capture group 2
    • \\d{1,2}\\.\\d{1,2}\\.\\d{4}.* Match a 'date like' pattern
  • ) Close group 2
  • ( Capture group 3
    • (?: Non capture group
      • \\r?\\n Math a newline
      • (?! Negative lookahead
        • [^\\S\\r\\n]*\\S+\\s* Match 0+ whitespaces without a newline
        • \\d{1,2}\\.\\d{1,2}\\.{4}
      • ) Close lookahead
      • .* Match the whole line
    • )* Close group and repeat 0+ times
  • ) Close group 3

Regex demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM