如何最大正则表达式非贪心工作倒退

问题描述:

我总是认为正则表达式是这样工作的,但我想我从来没有像现在这样打这样的情况,我不知道解决这个问题的最好方法。如何最大正则表达式非贪心工作倒退

字符串来考虑:

apple 
apple 
apple 
cat 

我想使用类似苹果*猫,然而,这第一个苹果匹配给猫当我真正想要的最后一个苹果和猫。?。

请记住这只是一个例子,我在寻找一个通用的方法来做到这一点(即告诉我,只是与苹果和猫之间有一个换行符不会在我的现实情况下工作)

+2

你应该编辑这个更像你真正的问题。 –

+0

这与贪婪无关。请记住,正则表达式引擎从左到右搜索字符串,并返回最左边位置的第一个结果。 –

+0

看看这个问题:http://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word –

您可以在Python中使用基于正则表达式tempered greedy token这种负前瞻:

reg = re.compile(r'apple(?:(?!apple).)*cat', re.DOTALL) 

RegEx Demo

(?:(?!apple).)*将0以上不在下一个POS有apple任何字符匹配从而确保我们的比赛中没有apple。请注意,对于比赛中的每个角色都会声明负向预测。

+0

我在python的文档中找不到'tempered greedy token'。这句话刚刚弥补了吗?该网站是一个微不足道的垃圾,并没有任何发展深入理解正则表达式。我确实看到他的一个页面请求通过http://www.rexegg.com/regex-consultant.html – sln

+0

我不认为Python正则表达式文档将有任何参考。短语“脾气暴躁的令牌”没有很好的记录,但是这种模式的“(?:(?!apple)。)*'是相当通用的并且众所周知。 – anubhava

+0

当然。由于我从来没有听说过它,我必须看看。就像我说的那样,一堆制作了琐碎的垃圾。 – sln