捕获两个单词之间的字符串,但仅限第一次

Rah*_*wal 1 python regex

我有这样的字符串:

 text = "Why do Humans need to eat food? Humans eat food to survive."
Run Code Online (Sandbox Code Playgroud)

我想之间捕捉一切Humanfood,但只有第1次.

预期产出

Humans need to eat food
Run Code Online (Sandbox Code Playgroud)

我的正则表达式:

p =r'(\bHumans?\b.*?\bFoods?\b)'
Run Code Online (Sandbox Code Playgroud)

Python代码:

re.findall(p, text, re.I|re.M|re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

代码正确捕获人类和食物之间的字符串,但它不会在第一次捕获时停止.

研究:

我已经读过这个让我不需要贪婪?但是我无法弄清楚应该把它放在哪里让它变得非贪婪.我试过的所有其他排列和组合我都无法在第一场比赛中阻止它.

更新

我正在写很多正则表达式来捕获像这样的各种其他实体并一次解析它们因此我无法改变我的re.findall逻辑.

Tot*_*oto 5

使用search而不是findall:

import re
text = "Why do Humans need to eat food? Humans eat food to survive."
p =r'(\bHumans?\b.*?\bFoods?\b)'
res = re.search(p, text, re.I|re.M|re.DOTALL)
print(res.groups())
Run Code Online (Sandbox Code Playgroud)

输出:

('Humans need to eat food',)
Run Code Online (Sandbox Code Playgroud)

或者.*在正则表达式的末尾添加:

import re
text = "Why do Humans need to eat food? Humans eat food to survive."
p =r'(\bHumans?\b.*?\bFoods?\b).*'
#                      here ___^^
res = re.findall(p, text, re.I|re.M|re.DOTALL)
print(res)
Run Code Online (Sandbox Code Playgroud)