在 Python 中查找关键字列表之间的文本并使用正则表达式指向

Find text between list of keywords and point with RegEx in Python

# 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."

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

结尾

删除正则表达式以简化它。加上贪婪/逗号 (.*?), 只是提取逗号前的第一部分,我想你的意思是 "to the next point": (.*?)\.

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

结果:

['esta es una de, las palabras']

去除词界可以匹配句子中的部分关键词。您可以 force 一个带有 \W 的非单词字符,然后它会起作用(就像单词边界一样):

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

改为使用 \b(?:{0})\s*(.*?)(?=\b(?:{0})|$) 和前瞻:

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.']