正则表达式非贪婪的单词捕获

时间:2016-10-26 19:11:37

标签: regex regex-negation

从以下字符串开始:

  

worda1 worda2 ... wordan wordb1 wordb2 ... wordbn

......不是字面意思,但意味着其他字也可以存在。这些词可以是'和'

我想捕获

  

wordb1 wordb2 wordbn

问题在于,到目前为止我写的正则表达式是我使用了\ w,然后匹配'和'并导致贪婪的捕获。由于需要捕获任意数量的单词,因此前瞻和后视不会起作用。

编辑:这是一个例子:

  

每个人都去了公园,没有人留在家里

应该捕获:

  

没有人留在家里

正则表达式无法硬编码短语"没有人留在家中",因为它需要捕获除"和"以外的任意字符序列。

更好:

  那是早上,所有人都去了公园,没有人留在家里

应该捕获:

  

没有人留在家里

总体而言,我只想捕捉到第一个"和#34;,从右边开始。

我可以编写一些代码来执行此操作,但想知道是否有正则表达式来执行此操作。

我正在使用Python re,但对其他版本的正则表达式开放。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这应该这样做:

/(?:.* and )?(.+)/

请注意,这与整行匹配,但捕获的匹配将是您想要的部分。一个工作示例是here

但有几点需要注意:

  1. 这假定每行有一个句子。
  2. 当它没有单词'和'时,它将匹配整行。在里面。也许这就是你想要的。
  3. 这假定该行的第一个单词不是'和'。
  4. 这也假设该行的最后一个字不是'和'。