正则表达式非贪心词抓取

Regular expression non-greedy word capture

从以下字符串开始:

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

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

之外的任何内容

我想捕捉

wordb1 wordb2 wordbn

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

编辑:这是一个例子:

and everyone went to the park and nobody was left at home

应该捕获:

nobody was left at home

正则表达式无法对短语 "nobody was left at home" 进行硬编码,因为它需要捕获除 "and".

之外的任何任意单词序列

更好:

and it was morning and everyone went to the park and nobody was left at home

应该捕获:

nobody was left at home

总的来说,我只想捕获第一个 "and",从右边开始。

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

我正在使用 Python re,但对其他风格的正则表达式持开放态度。

感谢您的帮助。

应该这样做:

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

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

不过有一些注意事项:

  1. 假设每行一个句子。
  2. 如果其中没有单词 'and',这将匹配整行。也许这就是你想要的。
  3. 这假设该行的第一个词不是 'and'。
  4. 这还假设该行的最后一个字不是 'and'。