首页 > 解决方案 > 捕获两个单词之间的字符串,但只有第一次

问题描述

我有这样的字符串:

 text = "Why do Humans need to eat food? Humans eat food to survive."

我想捕捉之间的一切Humanfood但只有第一次。

预期产出

Humans need to eat food

我的正则表达式:

p =r'(\bHumans?\b.*?\bFoods?\b)'

蟒蛇代码:

re.findall(p, text, re.I|re.M|re.DOTALL)

该代码正确捕获了 Human 和 Food 之间的字符串,但它不会在第一次捕获时停止。

研究

我已经阅读了它以使其不贪婪,?但我无法弄清楚我应该将其保留在哪里以使其不贪婪。我尝试过的所有其他排列和组合我无法在第一场比赛中阻止它。

更新

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

标签: pythonregex

解决方案


使用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())

输出:

('Humans need to eat food',)

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

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)

推荐阅读