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