C# 用于分析用括号分段的数据的正则表达式
我需要一个正则表达式来解析一些用方括号分段的数据。C# 用于分析用括号分段的数据的正则表达式,c#,regex,C#,Regex,我需要一个正则表达式来解析一些用方括号分段的数据。 每个数据包含3个部分,每个部分都有固定的名称和预设的顺序,可以与膳食进行比较。 (部分标识符:[早餐],[午餐],[晚餐]) 但问题是,每个数据的部分或全部部分可能不存在,如下例所示,内容可能包含成对的括号,以提供附加信息。 (但不包含其中的标识符。) 样本数据: 20181225[早餐]鱼指三明治[400千卡]鳗鱼冻[午餐]猪肉馅饼[500千卡][晚餐]星鱼馅饼 20181226[晚餐]星空派 20181227[早餐]鱼指三明治[400千卡
每个数据包含3个部分,每个部分都有固定的名称和预设的顺序,可以与膳食进行比较。
(部分标识符:
[早餐]
,
[午餐]
,
[晚餐]
)但问题是,每个数据的部分或全部部分可能不存在,如下例所示,内容可能包含成对的括号,以提供附加信息。
(但不包含其中的标识符。)
样本数据:
20181225
[早餐]
鱼指三明治[400千卡]
鳗鱼冻
[午餐]
猪肉馅饼[500千卡]
[晚餐]
星鱼馅饼20181226
[晚餐]
星空派20181227
[早餐]
鱼指三明治[400千卡]
鳗鱼冻
[晚餐]
星河派20181228
所需输出:
$date:20181225
$早餐:鱼指三明治[400千卡]
鳗鱼冻
$午餐:猪肉馅饼[500千卡]
$晚餐:星空派
$date:20181226
$晚餐:星空派
$date:20181227
$早餐:鱼指三明治[400千卡]
鳗鱼冻
$晚餐:星空派
$date:20181228
我尝试了下面的正则表达式,但不能正常工作,因为贪婪的量词忽略了以下部分,即使它们存在
(?\d{8})(?:
\[早餐\]
(?*)?(?:
\[午餐\]
(?*))(?:
\[晚餐\]
(?*)?
提前感谢。一个选项是,在每个可选组的末尾,提前查找
$
或您使用哪种编程语言?@Jan我正在研究C。谢谢
(?<date>\d{8})(?:<br \/>\[Breakfast\]<br \/>(?<breakfast>.*?(?=$|<br)))?(?:<br \/>\[Lunch\]<br \/>(?<lunch>.*?(?=$|<br)))?(?:<br \/>\[Dinner\]<br \/>(?<dinner>.*))?$
^^^^^^^^^^
(?<date>\d{8})(?:<br \/>\[Breakfast\]<br \/>(?<breakfast>(?:(?!<br \/>\[(Lunch|Dinner)\]).)+))?(?:<br \/>\[Lunch\]<br \/>(?<lunch>(?:(?!<br \/>\[Dinner).)+))?(?:<br \/>\[Dinner\]<br \/>(?<dinner>.*))?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^