You need to enable JavaScript to run this app. Python DataFrame文本处理:如何仅匹配完整独立单词?
优惠活动
大模型
产品
解决方案
定价
更多

Python DataFrame文本处理:如何仅匹配完整独立单词?

问题说明

当前脚本使用Python原生的in运算符做子串包含判断,只要word5是Description字段内容的子串就会触发匹配,因此word5555这类包含word5片段的长字符串也会被判定为命中,不符合你需要「仅匹配完整独立单词」的要求。

解决方案

要实现独立单词的精准匹配,可以借助正则表达式的单词边界规则实现,不需要修改原有类标签拼接的逻辑,仅替换匹配判断的部分即可。

实现步骤

  • 导入Python内置的正则表达式标准库re,无需额外安装依赖:
    import re
    
  • 用正则的单词边界标记\b构造匹配规则:\b会标记单词的前后分界位置,只有当待匹配词的前后是「非单词字符(空格、标点、句首/句尾)」时才会判定为命中,像word5555中word5的后面是数字(属于单词字符),就不会满足边界匹配条件。
  • 用re.escape()处理待匹配的单词,避免单词中存在正则特殊字符时出现匹配异常。

调整后完整代码

import re
import pandas as pd

word_list = ['word1', 'word2', 'word3', 'word4']
word_list1 = ['word5']
classe = []

for i in range(0, df.shape[0]):
    classe.append('')
    # 提前将当前行的描述文本转小写缓存,减少重复计算
    desc_content = df["Description"][i].lower()
    
    # 匹配word_list对应Classe1的逻辑,替换为完整单词匹配
    for item in word_list:
        # 构造带单词边界的匹配规则
        match_rule = r'\b' + re.escape(item.lower()) + r'\b'
        if re.search(match_rule, desc_content):        
            if classe[i] != ('') and classe[i] != ('Classe1'):
                classe[i] = classe[i] + ' \\ ' + 'Classe1'
            else:
                classe[i] = 'Classe1'
            
    # 匹配word_list1对应Classe2的逻辑,替换为完整单词匹配
    for item in word_list1:
        match_rule = r'\b' + re.escape(item.lower()) + r'\b'
        if re.search(match_rule, desc_content):           
            if classe[i] != ('') and classe[i] != ('Classe2'):
                classe[i] = classe[i] + ' \\ ' + 'Classe2'
            else:
                classe[i] = 'Classe2'

匹配效果说明

  • 以下场景会正常触发匹配:word5、hello word5 world、word5!、(word5)
  • 以下场景不会触发匹配:word5555、myword5、word5_test、aword5b

内容的提问来源于stack exchange,提问作者S2J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 12:36:04