如何使用正则表达式从电影信息网页中精准提取演员名单并过滤分类项
解决方案
优先方案:DOM精准提取(准确率最高)
你已经可以定位到包含「Cast」的span.post-bold标签,直接通过节点关系提取对应内容,完全不会混入分类等其他字段信息,比纯正则处理全量文本可靠性高很多
- 核心逻辑:提取Cast标签后到下一个
span.post-bold标签(下一个字段的标识)之间的所有文本,去除多余格式后即可得到纯演职人员名单 - 代码示例(jQuery):
// 定位Cast对应的加粗标签 const castLabel = $('span.post-bold:contains("Cast")'); // 提取目标区间文本,清理前缀冒号和多余空格 const castContent = castLabel.nextUntil('span.post-bold').text().replace(/^\s*:\s*/, '').trim();
备选方案:正则匹配全量div文本
如果必须对已经拿到的div全部文本做处理,使用如下正则和过滤逻辑实现需求
- 提取演职人员段正则:
/Cast\s*:\s*([A-Za-z ,.'-]+?)(?=\s*(?:[A-Z][a-z]+|$))/
匹配逻辑:先定位「Cast:」标识,捕获后续所有符合姓名规则的字符,直到遇到下一个首字母大写的字段名(如Title、Year、Categories)或文本结尾,精准隔离出演职人员内容 - 后续过滤优化:拆分名单后过滤全大写分类项,兼容只有名没有姓氏的演员格式
// fullText为你已拿到的div.post-message全部文本 const castMatch = fullText.match(/Cast\s*:\s*([A-Za-z ,.'-]+?)(?=\s*(?:[A-Z][a-z]+|$))/); if (castMatch) { const castList = castMatch[1].split(',') .map(item => item.trim()) // 过滤包含3个及以上连续大写字母的全大写分类项 .filter(name => !/[A-Z]{3,}/.test(name)) .join(', '); }
内容的提问来源于stack exchange,提问作者Commentator
相关产品推荐
相关产品推荐

