Python正则表达式:在句子中重复匹配模式

时间:2018-02-06 22:02:31

标签: python regex

我有一个表单

some_text_0 pattern_instance_1 some_text_1 pattern_instance_2 some_text_2 pattern_instance_3 some_text_3 ..

其中每个pattern_instancePATTERN的实例,

我希望将其解压缩为 [pattern_instance_1, some_text_1], [pattern_instance_2, some_text_2], ...(删除第一个some_text_0)。

这样做的最佳方式是什么?

作为一个更具体的案例,我试图匹配像

这样的东西

Things I need to buy: 1 banana two apples three pears zero kiwis

[1, banana][two, apples],..

我已经有正则表达式匹配数字,但它相当复杂。我发现的几个解决方案似乎涉及否定这个正则表达式来对某些文本进行匹配,但我想知道是否会有另一种方式,因为我不确定如何否定我的正则表达式。我也试过玩re.find_all(),但无法让它发挥作用。

1 个答案:

答案 0 :(得分:1)

这就是我接近它的方式......

  1. re.finditer会为您提供MatchObjects列表

  2. 每个MatchObject都有start函数,可以为您提供模式的第一个索引。 end()函数是类比的。

  3. 然后,唯一剩下的就是建立元组。

    • 通过检索start()和end()索引之间的文本来创建第一个元素。
    • 通过检索此MatchObject的end()和下一个MatchObject的start()之间的文本来创建第二个元素(如果那是最后一个MatchObject,则直到字符串的结尾)。