首页 > 解决方案 > 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

我不明白如何解决错误或如何以不同的方式解决这个问题。

任何帮助将不胜感激!

标签: pythonregexstring

解决方案


您的正则表达式版本的问题是,列表中的某些单词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']

推荐阅读