python - Python完全匹配 - 字符串中的词典元素完全匹配
问题描述
我有一个包含数千个字符串的词典(包括:单个词、复合词、使用连字符的复合词以及字符串)和一个包含文本文档的数据集。我希望能够计算每个文本文档中出现的确切元素(存在于词典中)的数量。
我试过这个:
lexicon = ['A', 'FOO', 'f']
instance = 'fA near A AFOO FO ff'
matches = []
for word in lexicon:
if word in instance:
matches.append(word)
虽然期望结果是['A']
,但上面的代码也会返回子字符串['A', 'FOO', 'F']
。
使用正则表达式的第二种方法:
matches = []
for word in lexicon:
if re.search(r'\b' + word + r'\b', instance):
#if re.search(r'\b({})\b'.format(word), instance):
matches.append(word)
虽然以这种方式获得的列表正是我所需要的,但我得到了以下错误:
File "<ipython-input-18-5331958cdf85>", line 4, in <module>
if re.search(r'\b' + word + r'\b', instance):
File "/opt/anaconda3/lib/python3.7/re.py", line 183, in search
return _compile(pattern, flags).search(string)
File "/opt/anaconda3/lib/python3.7/re.py", line 286, in _compile
p = sre_compile.compile(pattern, flags)
File "/opt/anaconda3/lib/python3.7/sre_compile.py", line 764, in compile
p = sre_parse.parse(p, flags)
File "/opt/anaconda3/lib/python3.7/sre_parse.py", line 938, in parse
raise source.error("unbalanced parenthesis")
error: unbalanced parenthesis
我不明白如何解决错误或如何以不同的方式解决这个问题。
任何帮助将不胜感激!
解决方案
您的正则表达式版本的问题是,列表中的某些单词lexicon
可能包含特殊的正则表达式字符 - (
,[
等。
转义词典中的单词,它应该可以工作:
import re
lexicon = ['A', 'FOO(()))', 'f']
instance = 'fA near A AFOO FO ff'
matches = []
for word in lexicon:
if re.search(r'\b' + re.escape(word) + r'\b', instance):
matches.append(word)
print(matches)
印刷:
['A']
推荐阅读
- javascript - 仅在刀片模板中使用 JQuery 每行检查复选框
- c - 对于浮点宏,C 标准“转换为其语义类型”是什么意思?
- android - 主题中的 Android 窗口背景不起作用 - 启动画面
- c# - 如何在一个线程中处理来自多个线程的数据(使用 ConcurrentQueue)?
- php - 使用 php 进行 pgp 加密“解密失败”
- javascript - ComponentDidMount redux-saga 动作不起作用
- c++ - 即使直接构造函数有效,为什么 emplace_back 会失败?
- asp.net-mvc - Asp.net mvc5 hidden for 不会将数据传递给控制器
- .net - Vb .net Chart Spline 带有对数X轴的垂直方向得到异常
- python - 在Python中逐行修改字符串