我有一个开始的短语说fruits
。我有一些结尾词,例如apple
,banana
和pineapple
。
我有一些文档的变量为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中部分工作。
问题:
我所需要的只是当我们遇到水果而找不到任何结尾短语时,然后直到文档结尾。
预期的产量 text
3 :
Fruits are good Daily we should have pineapple ;; fruits have various minerals.
Most of them are very tasty
PS :我也尝试过$
,但这也没有用。
答案 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]