You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas中如何仅提取字符串的完整匹配单词?

问题根源

原有匹配逻辑会错误命中子串的核心原因是,正则规则没有添加单词边界限定——只要目标字符串的任意位置出现匹配项的片段,就会被识别为命中,这也是Liu里的iu子串会被错误提取的原因。

调整方案

只需对原有正则规则做两处优化,即可完全匹配预期效果:

  • 对所有待匹配条目做正则转义:使用re.escape()处理cities、liked_names列表中的每一个元素,避免条目内的空格、特殊字符(如连字符、加号)干扰正则解析逻辑
  • 给拼接完成的匹配规则加上单词边界\b:\b会自动识别单词的起止位置,仅当匹配项是完整独立的词汇时才触发提取,不会截取长单词的内部片段
可直接复用的实现代码
import re

# 优化 Cities 列提取逻辑(补充转义和边界,避免后续因为列表内容变动出现匹配错误)
escaped_cities = [re.escape(city) for city in cities]
city_pattern = fr'\b({"|".join(escaped_cities)})\b'
df['Cities'] = df['Students'].str.extract(city_pattern, expand=False)

# 修复 Liked Names 列提取逻辑
escaped_liked_names = [re.escape(name) for name in liked_names]
liked_pattern = fr'\b({"|".join(escaped_liked_names)})\b'
df['Liked Names'] = df['Students'].str.extract(liked_pattern, expand=False)
适配效果

调整后的规则可以完全覆盖你的样例场景:

  • 匹配iu时,因为Liu中的iu两侧都是连续英文字符,不满足单词边界的触发条件,不会被错误提取,对应行的Liked Names值为空
  • 匹配Madrid时,原字符串Anna-Madrid+中Madrid的前后是连字符、加号这类非单词字符,刚好满足单词边界要求,可以被正确识别提取
  • 匹配Tommy Julien这类带空格的长名称时,转义后会作为完整整体匹配,不会被空格拆分成零散片段
    运行后输出的DataFrame与你给出的预期结果完全一致。

内容的提问来源于stack exchange,提问作者Elisa L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 03:27:02