繁体   English   中英

组与正则表达式匹配

[英]Groups match with regex

我有这样的事情:

Some info_a
Useless info
sub_info_a
Useless info

Some info_b
Useless info
sub_info_b_1
sub_info_b_2
Useless info

Some info_c
Useless info
sub_info_c
Useless info

我想创建组,以便我可以有这样的东西:

(info_a, sub_info_a), (info_b, sub_info_b_1, sub_info_b_2), (info_c, sub_info_c)

我试过了 :

^Some (info_\w+) .*$\n.*$\n(?:^(sub_info_\w+) .*$\n)+

但它只匹配最后一个 sub_info_b

(info_a, sub_info_a), (info_b, sub_info_b_2), (info_c, sub_info_c)

我也试过:

^Some (info_\w+) .*$\n.*$\n|^(sub_info_\w+) .*$\n

这个给了我:

('info_a', ''), ('', 'sub_info_a'), ('info_b', ''), ('', 'sub_info_b_1'), ('', 'sub_info_b_2'), ('info_c', ''), ('', 'sub_info_c')

这不是我真正想要的。 请注意, sub_info 可以出现不止一次或两次。

^Some (info_\w+).*\n.*\n((?:^sub_info_\w+.*\n)+)

捕获组应该在量化的非捕获组周围 当您量化捕获组时,它只捕获最后一次出现的情况。 所以你需要围绕它放置一个组来捕捉所有的重复。

请注意,这不会将每个重复放入结果中的单独组 - 结果中的捕获组和.group(n)项之间始终存在.group(n)对应关系。 处理正则表达式的结果时需要拆分第二个捕获组。

我还删除了.*之前的空格,并且不需要\\n$

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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