[英]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.