如何实现链接的精确关键词匹配筛选?避免子串匹配问题
精准匹配关键词筛选链接的解决方案
问题场景
有一组链接需要筛选出包含精确匹配关键词(如join、career)的链接,示例链接列表:
links = ['https://enzymocore.com/news/august-2015-joint-venture-in-peru/', 'https://enzymocore.com/join-us']
当关键词为join时,仅需获取第二个链接,但原代码会误将包含joint的第一个链接也纳入结果:
finallink = [] for link in links: if 'join' in link: finallink.append(link)
解决方案
方法1:正则表达式匹配单词边界
利用正则的\b(单词边界)确保关键词是独立单元,不会匹配包含它的子串:
import re keywords = ['join', 'career'] links = ['https://enzymocore.com/news/august-2015-joint-venture-in-peru/', 'https://enzymocore.com/join-us'] finallink = [] for link in links: # 遍历关键词,匹配任意一个精确关键词 if any(re.search(rf'\b{re.escape(key)}\b', link) for key in keywords): finallink.append(link) print(finallink) # 输出: ['https://enzymocore.com/join-us']
注:用
re.escape()处理关键词,避免关键词含特殊正则字符时出错。
方法2:分割链接片段后检查
把链接按/和-分割成独立片段,检查关键词是否为完整片段:
keywords = {'join', 'career'} # 用集合提升查找效率 links = ['https://enzymocore.com/news/august-2015-joint-venture-in-peru/', 'https://enzymocore.com/join-us'] finallink = [] for link in links: # 拆分链接中的所有分隔片段 parts = re.split(r'[-/]', link) if any(key in parts for key in keywords): finallink.append(link) print(finallink) # 输出: ['https://enzymocore.com/join-us']
方法3:直接匹配关键词的分隔场景
如果关键词通常出现在路径分隔符前后,直接检查这类固定格式:
keywords = ['join', 'career'] links = ['https://enzymocore.com/news/august-2015-joint-venture-in-peru/', 'https://enzymocore.com/join-us'] finallink = [] for link in links: for key in keywords: # 匹配关键词前是/、后是-,或链接以关键词结尾的情况 if f'/{key}' in link or f'{key}-' in link or link.endswith(key): finallink.append(link) break print(finallink) # 输出: ['https://enzymocore.com/join-us']
内容的提问来源于stack exchange,提问作者glitch_123
相关产品推荐
相关产品推荐

