# coding=utf-8
import re
m = "Hola esto es un ejemplo Objeto: esta es una de, las palabras."
keywords = ['Objeto:', 'OBJETO', 'Objeto social:', 'Objetos']
obj = re.compile(r'\b(?:{})\b\s*(.*?),'.format('|'.join(map(re.escape, keywords))))
print obj.findall(m)
我想在一个关键词和下一个关键词之间打印文本。在这种情况下,我想要的输出是:“ esta es una de,las palabras。”
答案 0 :(得分:2)
结尾的\b
阻止匹配,因为您的关键字以:
结尾
通过删除它来简化正则表达式。再加上贪婪/逗号(.*?),
仅提取逗号前的第一部分,我想您的意思是“到下一点”:(.*?)\.
obj = re.compile(r'\b(?:{})\s*(.*?)\.'.format('|'.join(map(re.escape, keywords))))
结果:
['esta es una de, las palabras']
尽管删除单词边界可以匹配句子中部分关键字。之后,您可以用\W
强制使用非单词char,它可以正常工作(作用类似于单词边界):
obj = re.compile(r'\b(?:{})\W\s*(.*?)\.'.format('|'.join(map(re.escape, keywords))))
答案 1 :(得分:1)
Use \b(?:{0})\s*(.*?)(?=\b(?:{0})|$)
with lookahead instead:
import re
m = "Hola esto es un ejemplo Objeto: esta es una de, las palabras."
keywords = ['Objeto:', 'OBJETO', 'Objeto social:', 'Objetos']
obj = re.compile(r'\b(?:{0})\s*(.*?)(?=\b(?:{0})|$)'.format('|'.join(map(re.escape, keywords))))
print(obj.findall(m))
This outputs:
['esta es una de, las palabras.']