在Python中使用条件提取文本

在Python中使用条件提取文本,python,regex,python-3.x,Python,Regex,Python 3.x,我已经研究了很多,找不到一个正则表达式,我可以实现以下条件所需的文本 我有一段很长的文字,我想在一定条件下提取文字: 提取的文本应以单词列表开头。苹果、香蕉、桔子、菠萝。 当遇到其他3个单词中的任何一个并且前面有一个数字时,它应该以结尾。 仅当前面有数字时,才应开始提取。 示例文本: 我包里有两个苹果,苹果是很好吃的食物。你这个笨蛋 每天吃苹果。这对健康很有好处。香蕉也不错。 它可以减少脂肪 以下是例外输出 我包里的苹果和苹果都很棒……对健康有好处 香蕉也很好。它可以减少脂肪 所以,如果有2个关

我已经研究了很多,找不到一个正则表达式,我可以实现以下条件所需的文本

我有一段很长的文字,我想在一定条件下提取文字:

提取的文本应以单词列表开头。苹果、香蕉、桔子、菠萝。 当遇到其他3个单词中的任何一个并且前面有一个数字时,它应该以结尾。 仅当前面有数字时,才应开始提取。 示例文本:

我包里有两个苹果,苹果是很好吃的食物。你这个笨蛋 每天吃苹果。这对健康很有好处。香蕉也不错。 它可以减少脂肪

以下是例外输出

我包里的苹果和苹果都很棒……对健康有好处

香蕉也很好。它可以减少脂肪

所以,如果有2个关键字存在,我想创建2个文件,依此类推

更新我尝试的内容:

我尝试的正则表达式是:

(?=(\d+)(\s?)apple)(.*)(?=\d+\s?banana:?s)
我这里有两个问题:

在提取的文本中,我不想要第一个数字

如果我有4个单词,我不需要写那么多的组合,如果我们正在搜索苹果,那么为它提取的文本将保存在该变量中

Python版本:3.5

你能帮我用一个正则表达式吗?

试试这个:\d+\s*?:苹果|香蕉|橙色|菠萝?\b[\s\s]*?=$|\d+\s*?:苹果|香蕉|橙色|菠萝?\b

见:

守则:

import re

regex = r"\d+\s*((?:Apple|Banana|Orange|Pineapple)s?\b[\s\S]*?)(?=$|\d+\s*(?:Apple|Banana|Orange|Pineapple)s?\b)"

test_str = "I have 2 apples in my bag and apples are great food toeat. you shud eat apples daily. it is very good for health. 3 bananas are also good. it reduces fat."

matches = re.findall(regex, test_str, re.MULTILINE | re.IGNORECASE)

for match in matches: print(match + "\n")

注意:我假设您希望停止匹配新行字符。如果情况并非如此,您可以删除re.MULTILINE标志,以便$匹配字符串的结尾。

如果您是向下投票,请提供重复的问题。我很高兴删除这个问题,因为我已经完成了我的分析,而且我对regexYou是一个新手。因为您没有尝试过任何代码,并且希望整个代码都由其他人编写,所以您的票数下降。阅读有关regex的内容,花点精力编写代码,如果遇到困难,请回到这里寻求解决方案。@serbia99:添加了我迄今为止尝试过的内容脱离上下文,单个regexp不是。。。写代码的一些努力…:,至少不在我的书中。你已经读过了吗?老实说,整件事都是关于一个好的正则表达式的,这就是我正在尝试的,我的后期编辑工作非常好,唯一的问题是如果我把我的字符串改为我的包里有2个苹果和1个苹果….xx。。。然后它会给一个匹配。我在看如果我们在找苹果,只有当它得到苹果以外的东西时,它才会给出一个匹配