python - 有没有办法使用列表中的 reg 表达式?
问题描述
我有一个主题词列表,其中包含 reg 表达式:
list = ['peaceful','thank\s?god','infuriated','mood\s?dropped']
以及主题词到其主题的字典映射列表:
dict = {'peaceful': 'Restful','thank\s?god': 'Thankful','infuriated': 'Angry','mood\s?dropped':'Sad'}
目标是编写一个函数来判断一个字符串是否在列表中包含 reg 表达式,并返回匹配的主题。
某些提及可能与多个主题匹配。所以它需要保留所有匹配的主题。此外,区分大小写将是另一个需要考虑的问题。
我试过:
import re
def topic_emotion(text):
text_lower=text.lower()
output = []
for elem in Emotion_Keywords_list:
if bool(re.search(elem, text_lower)):
output.append(Emotion_dict[elem])
return output
例如:
topic_emotion('todaypeacefulday Im INFURIATED') = ['Restful','Angry']
但这似乎是错误的,无法处理 reg 表达式的情况,还有其他我应该考虑的因素吗?
解决方案
上面的代码在 Python 3.7 上运行良好
正则表达式模式涉及许多特殊字符。更好的方法是在使用前编译模式。
import regex as re
Emotion_Keywords_list = ['平安','谢天谢地','激怒','心情\s?dropped']
主题= ['休息','感恩','愤怒','悲伤']
导入 re def topic_emotion(text): output = [] compiled_keywords =[]
for elem in Emotion_Keywords_list:
compiled_keywords.append(re.compile(elem,flags=re.I))
emotion_dict=dict(zip(compiled_keywords,topic))
for elem in compiled_keywords:
if bool(re.search(elem, text)):
output.append(emotion_dict[elem])
return output
推荐阅读
- node.js - UnhandledPromiseRejectionWarning:错误:ENOENT:没有这样的文件或目录,打开
- mongodb - 如何在Mongodb中获取属性总和达到一定值的文档组合?
- debugging - 更改对象在调试器/检查器变量值表中的显示方式
- javascript - 在 PHP 中寻找这个 JS 函数的等价物
- python - 使用 defaultlist() 创建一个函数来初始化多个字典?
- powershell - Powershell - 在查看创建新文件的文件夹时 - 如果“Register-ObjectEvent”中的语句未触发
- java - 如果没有向下滚动,价格没有添加
- solr - Solr 中以搜索字符串开头的搜索结果的优先级
- javascript - 如何将数组属性写入 DOM 元素数组
- python - 仅裁剪 -2 标准差