Python如何判断字符串是否包含指定词库中的单词并返回匹配值
问题分析
原有代码存在两处核心错误:
- 逻辑判断错误:
if names in string是尝试判断整个列表对象是否为字符串的子元素,该逻辑永远不成立,返回结果恒为False - 变量未定义:
print(name)中的name变量没有提前声明赋值,运行会抛出变量不存在的报错
基础实现方案(子串匹配)
如果只要目标字符串中出现对应名称的子串就算匹配,不需要校验是否为独立单词,直接遍历词库逐个判断即可:
names = ["Joe", "Smith", "Nancy"] string = "Her name was Nancy" for name in names: if name in string: print(name)
运行后会直接输出匹配到的Nancy,如果字符串中存在多个匹配的名称,会依次全部输出。
也可以用列表推导式一次性获取所有匹配结果:
matched_names = [name for name in names if name in string] print(matched_names)
进阶实现方案(严格单词匹配)
如果需要避免子串误匹配(比如字符串中出现Joey时不匹配Joe),可以使用正则的单词边界实现精确的独立单词匹配:
import re names = ["Joe", "Smith", "Nancy"] string = "Her name was Nancy" # 生成正则匹配规则,re.escape规避名称中特殊字符的匹配异常 pattern = re.compile(r'\b(' + '|'.join(re.escape(name) for name in names) + r')\b') matches = pattern.findall(string) for match in matches: print(match)
内容的提问来源于stack exchange,提问作者Zqdiac Thanks
相关产品推荐
相关产品推荐

