繁体   English   中英

在关键字列表之间查找文本,并在Python中使用RegEx指向

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM