[英]Extract text available between two keywords and store that text into a list in 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
阻止匹配,因为您的关键字以以下结尾:
通过删除它来简化你的正则表达式。 加上贪婪/逗号(.*?),
只是在逗号之前提取第一部分,我想你的意思是“到下一点”: (.*?)\\.
obj = re.compile(r'\b(?:{})\s*(.*?)\.'.format('|'.join(map(re.escape, keywords))))
结果:
['esta es una de, las palabras']
删除单词边界可以匹配句子中的部分关键字。 你可以在之后用\\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.']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.