Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式从短语开始到带条件的文档结尾_Python_Regex - Fatal编程技术网

Python 正则表达式从短语开始到带条件的文档结尾

Python 正则表达式从短语开始到带条件的文档结尾,python,regex,Python,Regex,我有一个起始短语,说水果。我有一些结尾词,比如苹果、香蕉和菠萝 我有一些变量为text的文档: 果实 它们有益于健康 你应该吃苹果 果实 经常吃香蕉 你需要的水果 吃苹果 水果是好的 每天我们都应该吃菠萝 一般来说,水果含有各种矿物质 大多数都很好吃 我的正则表达式和代码: p = r'(\bFruits\b\s*\w*\s*\n*.*?(\bApples?\b|\bbananas?\b|\bpineapples?\b))' sep = ";;" lst = re.findall(p

我有一个起始短语,说
水果
。我有一些结尾词,比如苹果、香蕉和菠萝

我有一些变量为
text
的文档:

  • 果实

    它们有益于健康

    你应该吃苹果

  • 果实

    经常吃香蕉

    你需要的水果

    吃苹果

  • 水果是好的

    每天我们都应该吃菠萝

    一般来说,水果含有各种矿物质

    大多数都很好吃

  • 我的正则表达式和代码:

    p = r'(\bFruits\b\s*\w*\s*\n*.*?(\bApples?\b|\bbananas?\b|\bpineapples?\b))'
    sep = ";;"
    lst = re.findall(p, text, re.I|re.M|re.DOTALL)
    val = sep.join(str(v) for v in lst )
    
    上述正则表达式在
    text
    1和2中运行良好,部分在
    text
    3中运行良好

    问题

    Fruits are good Daily we should have pineapple ;; fruits have various minerals.
    Most of them are very tasty
    
    我所需要的是当我们遇到水果,并没有找到任何结束语,然后,只有这样,直到文件的结尾

    文本的预期输出
    3

    Fruits are good Daily we should have pineapple ;; fruits have various minerals.
    Most of them are very tasty
    

    p.S.:我也尝试了
    $
    ,但也不起作用。

    在表达式中包含
    \Z
    ,如下所示

    text = '''Fruits are good
    
    Daily we should have pineapple
    
    In general, Fruits have various minerals.
    
    Most of them are very tasty
    '''
    
    p = r'(\bFruits\b\s*\w*\s*\n*.*?(\bApples?\b|\bbananas?\b|\bpineapples?\b|\Z))'
    sep = ";;"
    lst = re.findall(p, text, re.I|re.M|re.DOTALL)
    val = sep.join(str(v) for v in lst )
    print(val)
    
    结果如下

    text = '''Fruits are good
    
    Daily we should have pineapple
    
    In general, Fruits have various minerals.
    
    Most of them are very tasty
    '''
    
    p = r'(\bFruits\b\s*\w*\s*\n*.*?(\bApples?\b|\bbananas?\b|\bpineapples?\b|\Z))'
    sep = ";;"
    lst = re.findall(p, text, re.I|re.M|re.DOTALL)
    val = sep.join(str(v) for v in lst )
    print(val)
    
    (“水果很好”\n\n每天我们应该吃菠萝”、“菠萝”);;(“水果含有多种矿物质。\n\n其中大多数非常美味,”)
    
    [在0.1s中完成]

    此处是否需要使用正则表达式?在这种情况下,Python字符串方法将更加清晰和简单:搜索文本中的第一个单词,找到后将所有内容添加到新的单词列表中,直到遇到任何来自结尾的单词或直到数据结束。是的,实际上正则表达式是一个要求!!然后用作附加可选的end\Z(与苹果、香蕉和PinapplesOrry没有找到的地方相同!!请更正我的正则表达式并粘贴在这里或作为答案!!这将很有帮助!!应该是这样的,但无法测试:p=r'(\bFruits\b\s*\w*\s*\n*?(\bApples?\b | \bAnananas?\b | \b | \bpineapples?\b |\Z))'