BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / python / #6990同步于 2015/5/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖

[问题]新手:正则表达式匹配url(已解决)

maoxian
2015/5/19镜像同步16 回复
利用正则表达式匹配类似http://sports.sina.com.cn/g/laliga/2015-05-18/06137610928.shtml的url 正则表达式匹配如下: news_url_pattern = re.compile('http://.*\.sina\.com\.cn/\w+/\w+/\d{4}-\d{2}-\d{2}/\d*\.shtml') url_list = re.findall(news_url_pattern,text) 匹配出的结果有个错误: http://sports.sina.com.cn/" target="_blank">体育</a>】<a onclick="try{if(window._S_uaTrack){_S_uaTrack('enttoprecomm', 'click2');}}catch(e){}" target="_blank" href="http://sports.sina.com.cn/g/premierleague/">杰拉德主场流泪告别</a> <a onclick="try{if(window._S_uaTrack){_S_uaTrack('enttoprecomm', 'click2');}}catch(e){}" target="_blank" href="http://sports.sina.com.cn/g/pl/2015-05-17/03017609732.shtml 感觉应该是正则表达式错了,怎么改才可以呢,求高手。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
Ncer机器人#1 · 2015/5/19
这么长的正则看的都晕,一般如果x(.+?)不行我就打算用bs了 通过『我邮2.0』发布
colorest机器人#2 · 2015/5/19
beautiful soup吧。。。 又不是写perl,没必要那么长的正则吧。。
simpleon机器人#3 · 2015/5/20
限定一下*.sina.com.cn中*的长度 比如re.compile('http://.{1,10}\.sina\.com\.cn/\w+/\w+/\d{4}-\d{2}-\d{2}/\d*\.shtml') 这种事最好还是先把html parse后再在遍历每个节点时用正则,这样就不会匹配出跨节点的结果;或者用用现成的CSS selector之类的东西。html本来就是有结构的。如果这么直接在一个大长字符串里用一个有好几个{x, m}/+/*的正则,正则表达式引擎得跑断腿了,还易出错
q228209机器人#4 · 2015/5/20
news_url_pattern = re.compile('http://.*\.sina\.com\.cn/\w+?/\w+?/\d{4}-\d{2}-\d{2}/\d*?\.shtml') 试试?
PiEgg机器人#5 · 2015/5/20
这样长的网址用正则会匹配到一些意想不到的网址的…… 通过『我邮2.0』发布
maoxian机器人#6 · 2015/5/20
【 在 simpleon 的大作中提到: 】 : 限定一下*.sina.com.cn中*的长度 : 比如[code=py] : re.compile('http://.{1,10}\.sina\.com\.cn/\w+/\w+/\d{4}-\d{2}-\d{2}/\d*\.shtml') : ................... 谢谢,写着玩拿来练手的,想试试正则表达式。
maoxian机器人#7 · 2015/5/20
【 在 PiEgg 的大作中提到: 】 : 这样长的网址用正则会匹配到一些意想不到的网址的…… : 通过『我邮2.0』发布 我试试
shaonianpai机器人#8 · 2015/5/20
求用bs4 发自「贵邮」
stealbaron机器人#9 · 2015/5/20
3L说的对呃,看结果明显是 http://后面的 .* 匹配了过长的区间, 一般正则表达式默认都是匹配越长越好(贪婪向) 像3L说,加个长度限制,或者使用 .*? 懒惰模式来匹配,懒惰模式仍然可能会有问题。 参考:http://deerchao.net/tutorials/regex/regex.htm,贪婪与懒惰节 不过总结来说尽量别用.*,最好给出更清晰的间隔说明,比如用\w+代替