我需要一个正则表达式来解析由方括号划分的某些数据。每个数据包含3个具有固定名称和预设顺序的部分,可以与进餐进行比较。(部分标识符:<br />[Breakfast]<br />,<br />[Lunch]<br />,<br />[Dinner]<br />)但是问题在于,每个数据的部分或全部部分可能不存在,如下所示,并且内容可能包含成对的括号以提供其他信息。(但绝对不要在其中包含标识符。)样本数据:20181225<br />[Breakfast]<br />Fish finger sandwich [400 kcal]<br />Jellied eels<br />[Lunch]<br />Pork pies [500 kcal]<br />[Dinner]<br />Stargazy pies20181226<br />[Dinner]<br />Stargazy pies20181227<br />[Breakfast]<br />Fish finger sandwich [400 kcal]<br />Jellied eels<br />[Dinner]<br />Stargazy pies20181228所需的Ouput:$date: 20181225$breakfast: Fish finger sandwich [400 kcal]<br />Jellied eels$lunch: Pork pies [500 kcal]$dinner: Stargazy pies$date: 20181226$dinner: Stargazy pies$date: 20181227$breakfast: Fish finger sandwich [400 kcal]<br />Jellied eels$dinner: Stargazy pies$date: 20181228我在下面尝试过正则表达式,但是由于贪婪的量词忽略了以下部分,即使它们存在也无法正常工作。(?<date>\d{8})(?:<br \/>\[Breakfast\]<br \/>(?<breakfast>.*))?(?:<br \/>\[Lunch\]<br \/>(?<lunch>.*))?(?:<br \/>\[Dinner\]<br \/>(?<dinner>.*))?提前致谢。 最佳答案 一种选择是,在每个重复组的末尾,在延迟重复$之后立即查找<br或.。还要将匹配的末尾锚定到字符串的末尾,以确保可以匹配的每个子组都将被匹配:(?<date>\d{8})(?:<br \/>\[Breakfast\]<br \/>(?<breakfast>.*?(?=$|<br)))?(?:<br \/>\[Lunch\]<br \/>(?<lunch>.*?(?=$|<br)))?(?:<br \/>\[Dinner\]<br \/>(?<dinner>.*))?$ ^^^^^^^^^^https://regex101.com/r/vtCLoX/1如果您不能指望仅包含该数据的字符串,则无法使用$-相反,在Breakfast之后,重复一次,确保不要碰到Lunch|Dinner,在,请确保不碰到Lunch时重复上述步骤:(?<date>\d{8})(?:<br \/>\[Breakfast\]<br \/>(?<breakfast>(?:(?!<br \/>\[(Lunch|Dinner)\]).)+))?(?:<br \/>\[Lunch\]<br \/>(?<lunch>(?:(?!<br \/>\[Dinner).)+))?(?:<br \/>\[Dinner\]<br \/>(?<dinner>.*))? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^https://regex101.com/r/vtCLoX/3关于c# - 使用正则表达式解析括号中的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53868596/ 10-15 06:47