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

时间:2019-05-03 09:49:02

标签: python regex

我有一个开始的短语说fruits。我有一些结尾词,例如applebananapineapple

我有一些文档的变量为text

  1.   

    水果

         

    它们对健康有益。...

         

    应该吃苹果

  2.   

    水果

         

    经常吃香蕉

         

    您需要的水果

         

    吃苹果

  3.   

    水果很好

         

    每天我们应该吃菠萝

         

    通常,水果中含有多种矿物质。

         

    其中大多数都很好吃

我的正则表达式和代码:

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中部分工作。

问题

我所需要的只是当我们遇到水果而找不到任何结尾短语时,然后直到文档结尾。

预期的产量 text 3

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

PS :我也尝试过$,但这也没有用。

1 个答案:

答案 0 :(得分:1)

在表达式中包括\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)

输出如下

('Fruits are good\n\nDaily we should have pineapple', 'pineapple');;('Fruits have various minerals.\n\nMost of them are very tasty\n', '') [Finished in 0.1s]