如何编写正则表达式提取结构一致但内容不同的CNBC网页链接?
解决CNBC链接提取的正则问题
嘿,我来帮你完善这个正则表达式!你的基础部分已经找对方向了,咱们先优化一下现有写法,再补上后面的日期和标题部分就能搞定。
首先,先简化你现有的开头片段:原来的[h][t][t][p][s]://[w][w][w].[c][n][b][c].[c][o][m]/[2][0][1][5-8]其实可以写成更简洁易读的版本:
https://www\.cnbc\.com/201[5-8]/
这里的关键优化点:
- 直接写
https://就行,没必要拆成单个字符的字符组 - 用
\.转义点号,因为正则里的.默认匹配任意字符,我们需要精准匹配域名里的真实点 201[5-8]和你原来的写法效果完全一致,但更简洁直观
接下来处理后面的动态部分:从你的例子能看出,年份后是两位数字的月份/两位数字的日期,再后面是由小写字母、数字、连字符组成的标题,最终以.html结尾。对应的正则片段是:
\d{2}/\d{2}/[\w-]+\.html
拆解一下这个片段的作用:
\d{2}:匹配恰好两位数字,对应月份和日期格式[\w-]:匹配字母、数字、下划线和连字符(CNBC的标题里只会出现这些字符)+:表示前面的字符组至少出现一次,确保标题不为空\.html:匹配结尾的.html后缀,同样要转义点号避免歧义
把两部分组合起来,完整的正则就是:
https://www\.cnbc\.com/201[5-8]/\d{2}/\d{2}/[\w-]+\.html
测试你给的两个例子:
https://www.cnbc.com/2016/10/12/billionaire-richard-branson-learned-a-key-business-lesson-playing-tennis.html→ 完全匹配https://www.cnbc.com/2016/10/12/hedge-fund-bonus-makeover.html→ 完全匹配
如果你的文本里链接前后可能有空格或其他无关字符,还可以给正则加上边界处理,比如忽略前后空格:
^\s*https://www\.cnbc\.com/201[5-8]/\d{2}/\d{2}/[\w-]+\.html\s*$
这样就能精准提取每一行的链接,不会被前后的空格干扰。
内容的提问来源于stack exchange,提问作者jackson
相关产品推荐
相关产品推荐

