首页 > 解决方案 > 如何从字符串中提取准确的单词,同时减少误报发现

问题描述

我想从字符串中提取确切的单词。我的代码通过将搜索项视为子字符串来导致错误发现。这是代码:


import re
text="Hello I am not react-dom"
item_search=['react', 'react-dom']

Found_item=[]
for i in range(0, len(item_search)):
    Q=re.findall(r'\b%s\b'%item_search[i], text, flags=re.IGNORECASE | re.MULTILINE | re.UNICODE)
    Found_item.append(Q)
    
print(Found_item)

输出是:[['react'], ['react-dom']]。所以,在结果中,我不想看到reactas 项目。

预期的输出是:[[''], ['react-dom']]

标签: python-3.xregex

解决方案


\b用于表示类型之间的边界。例如在单词和标点符号等之间,所以\b会出现在tfrom react 和-. 因此,由于我们需要整个单词,因此我们只需使用后向和前瞻来确保两者之间没有非空格(这与说两者之间有空格不同)。因此你可以使用:

 re.findall(rf"(?<!\S)({'|'.join(item_search)})(?!\S)", text)
['react-dom']

编辑:如果您要在句子中包含其他非单词内容,例如句点,请检查@DYZ 评论,然后您可以使用:

(?<!\S)({'|'.join(item_search)})\W*(?!\S)


推荐阅读