正则表达式多次匹配正向提前

问题描述

我正在努力为我的抓取后端创建一个正则表达式模式。我想创建一系列的日菜单(星期一至星期五)。对于每场比赛(一天),我都希望保留日期和列出的饭菜​​。到目前为止,我已经创建了:

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

我的图案有问题:

  1. 我无法创建不包含第二天日期的模式
  2. 在上一场比赛中包括日期时,上述问题导致了问题
  3. 我不知道如何表达星期五(X atm)字符串的结尾

编辑:这是针对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,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,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,25l Slepičí vývar s masem,zeleninou a nudlemi (1,-
                            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,6,12)        
                                
                                    
                                        109,-
                                    
                                Středa
                                2.9.2020
                            
                        Každý všední den 11:00 - 15:00
.
                    Polévka:
                                0,25l Hovězí vývar s masem,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,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,-
                                    
                                4250g Bramborový gratin s dýní,listový salát (3,-
                                    
                                Čtvrtek
                                3.9.2020
                            
                        Každý všední den 11:00 - 15:00
.
                    Polévka:
                                0,25l Frankfurtská s párkem (7)
                            
                                20,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),7)
                                
                                    
                                        109,-
                                    
                                4250g Mexické černé fazole se zeleninou a kukuřicí,tortila,pikantní dip salsa verde (1,-
                                    
                                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,25l Fenyklová 
                            
                                20,-
                            1150g Smažený sýr se šunkou,vařené brambory,tatarská omáčka (1,12)
                                
                                    
                                        99,-
                                    
                                2150g Dušený vepřový plátek s okurkou,vejcem a párkem,jasmínová rýže (3,-
                                    
                                3300g Penne s cuketovou omáčkou se slaninou,sušená rajčata,parmazán,polníček (1,-
                                    
                                4250g Šumavský toč (kynutá bramborová buchta),houbové soté (1,-

提前谢谢!

解决方法

要获取日期,日期和菜单,可以使用3个捕获组:

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

模式将匹配

  • (\S+)捕获第1组,匹配1个以上非空格字符
  • \s+匹配1个以上的空格字符
  • (捕获第2组
    • \d{1,2}\.\d{4}.*匹配“日期喜欢”模式
  • )关闭第2组
  • (捕获第3组
    • (?:非捕获组
      • \r?\n数学换行符
      • (?!负向超前
        • [^\S\r\n]*\S+\s*匹配0+个空格,没有换行符
        • \d{1,2}\.{4}
      • )提前关闭
      • .*匹配整行
    • )*关闭组并重复0次以上
  • )关闭第3组

Regex demo