Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于分析用括号分段的数据的正则表达式_C#_Regex - Fatal编程技术网

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>.*))?
                                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                      ^^^^^^^^^^^^^^^^^^^^^^^^^