在Python中使用条件提取文本

时间:2018-08-24 11:31:02

标签: python regex python-3.x

我已经进行了很多研究,找不到能在以下条件下实现所需文本的正则表达式。

我有一段很大的文字,我想在某些条件下提取文字:

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

示例文字:

     

我的书包里有2个苹果,苹果是很好的食物。你发抖   每天吃苹果。对健康非常有益。 3个香蕉也很好。   它可以减少脂肪。

下面是例外输出

  

袋子里的苹果和苹果很棒……对健康有益。

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

因此,如果存在2个关键字,则我希望创建2个文件,依此类推。

我尝试过的更新:

我尝试过的正则表达式是:

(?=(\d+)(\s?)apple)(.*)(?=\d+\s?banana:?s)

Regex I tried

我这里有2个问题:

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

  2. 如何使它具有动态性,就像我有4个单词一样,我不必编写那么多组合,如果我们要搜索苹果,则提取的文本将保存在该变量中

Python版本:3.5

您能帮我提供正则表达式吗?

1 个答案:

答案 0 :(得分:1)

尝试以下操作:assertThat(this.results.getResponse().getContentAsString().length()).isNotEqualTo(0);

请参阅:

Regex demo

代码:

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

code demo

注意:我假设您想停止匹配换行符。如果不是这种情况,则可以删除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与字符串结尾匹配。