【发布时间】:2013-04-13 19:01:51
【问题描述】:
我有一个如下所示的文件:
useless stuff
fruit: apple
fruit: banana
useless stuff
fruit: kiwi
fruit: orange
fruit: pear
useless stuff
这个想法是按照它们出现的顺序和分组来捕获所有水果名称。对于上面的例子,输出必须是这样的:
[['apple', 'banana'], ['kiwi', 'orange', 'pear']]
我通过遍历多行正则表达式 '^fruit: (.+)$' 的所有匹配项来成功地做到这一点,如果发现水果名称的行似乎彼此跟随,则将水果名称添加到同一个给定列表中。
但是,这对于在水果名称上进行替换是不切实际的(跟踪匹配开始和结束索引成为强制性的),所以我更愿意在单个正则表达式中执行此操作。
我试过了:
re.findall(r'(?:^fruit: (.+)$\n)+', thetext, re.M)
但它只返回一行。
我哪里错了?
【问题讨论】:
-
你绝对需要使用正则表达式吗?
-
@jamylak:我认为如果没有正则表达式,这将变得非常痛苦,匹配模式在现实世界中非常复杂。
-
它找到的一行是什么?