在Python中用正则表达式查找关键字列表和点之间的文本

在Python中用正则表达式查找关键字列表和点之间的文本,python,regex,keyword,Python,Regex,Keyword,我想在一个关键词和下一个关键词之间打印文本。在这种情况下我想要的输出:“esta es una de,las palabras。”尾随\b阻止匹配,因为关键字以结尾: 通过删除正则表达式简化正则表达式。再加上贪婪的/comma(.*),只提取逗号前的第一部分,我想你的意思是“到下一点”:(.*)。 结果: obj = re.compile(r'\b(?:{})\s*(.*?)\.'.format('|'.join(map(re.escape, keywords)))) 不过,去掉单词边界可以匹

我想在一个关键词和下一个关键词之间打印文本。在这种情况下我想要的输出:“esta es una de,las palabras。”

尾随
\b
阻止匹配,因为关键字以
结尾:

通过删除正则表达式简化正则表达式。再加上贪婪的/comma
(.*),
只提取逗号前的第一部分,我想你的意思是“到下一点”:
(.*)。

结果:

obj = re.compile(r'\b(?:{})\s*(.*?)\.'.format('|'.join(map(re.escape, keywords))))
不过,去掉单词边界可以匹配句子中的部分关键词。您可以在之后使用
\W
强制非单词字符,它将起作用(作用类似于单词边界):

\b(?:{0})\s*(.*?)(=\b(?:{0})|$)
与前瞻一起使用:

obj = re.compile(r'\b(?:{})\W\s*(.*?)\.'.format('|'.join(map(re.escape, keywords))))
这将产生:

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))

预期输出包括
,las palabras.
,不是吗?是的,但希望整个句子切中要害。比如:esta es una de,las palabras是的,我希望我的输出是['esta es una de,las palabras']@AnnaCastan尝试将正则表达式代码更改为
\b(?:{})\s*(.*)\。
@marco_gorelli!!非常感谢大家:):)这个答案也很有效!!非常感谢你:BLHSIN:因为你的关键词是一个多词词条的列表,甚至是空格分隔的,它们重叠,你应该考虑通过按我的顺序先按长度顺序排序条目来建立交替。否则,结果中可能会出现不需要的文本。哦,太好了。这个解决方案比我的最优得多。谢谢!:)不过,我还是不确定单词的边界。也许你真的需要抛弃Jean Francois使用的右侧边界。
obj = re.compile(r'\b(?:{})\W\s*(.*?)\.'.format('|'.join(map(re.escape, keywords))))
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))
['esta es una de, las palabras.']