求助正则表达式牛人帮忙解决一下

2014-08-21 11:12:17 +08:00
 endoffight
<a href="http://news.hsw.cn/younews/">前一页</a>&nbsp;&nbsp;<a href="http://news.hsw.cn/system/more/25330000/0000/25330000_00000011.shtml">下一页</a>


<a href="http://news.hsw.cn/system/more/25330000/0000/25330000_00000012.shtml">下一页</a>


<a href="http://news.hsw.cn/system/more/25330000/0000/25330000_00000012.shtml">前一页</a>&nbsp;&nbsp;<a href="http://news.hsw.cn/system/more/25330000/0000/25330000_00000010.shtml">下一页</a>

需要匹配 下一页 的URL
我是用的正则如下
re.compile(r'(?<=[\n|&nbsp;&nbsp;])<a href="(http://news.hsw.cn/system/more/.*?)">下一页</a>')
但是取不到第三种情况的URL,匹配结果是

http://news.hsw.cn/system/more/25330000/0000/25330000_00000012.shtml">前一页</a>&nbsp;&nbsp;<a href="http://news.hsw.cn/system/more/25330000/0000/25330000_00000010.shtml

求指点!
3654 次点击
所在节点    Python
17 条回复
bindiry
2014-08-21 11:20:12 +08:00
<a href="(http://news.hsw.cn/system/more/((?!<).)+)">下一页</a>

这样行不行?
Arrowing
2014-08-21 11:25:23 +08:00
js简单的:
var s = '<a href="http://news.hsw.cn/system/more/25330000/0000/25330000_00000011.shtml">下一页</a>';

var r = /<a href="(.*)">下一页/;

s.match(r)[1];
alexapollo
2014-08-21 11:47:07 +08:00
<a href="(http://news.hsw.cn/system/more/[^>]*?)">下一页</a>
endoffight
2014-08-21 11:54:14 +08:00
@bindiry
@alexapollo

感谢啦

二位的都可以,思路都很好 感谢
endoffight
2014-08-21 11:54:32 +08:00
@Arrowing 确实很简单
Vonex
2014-08-21 12:22:54 +08:00
<a href="[^"]+">[^<]+</a>
csensix
2014-08-21 12:56:07 +08:00
RewriteRule ^/(.*)$ %1/$1

大伙有空也帮忙解释一下这个正则,apache配置里面的,谢过。
imn1
2014-08-21 13:03:34 +08:00
善用字符排除 [^不可能字符],不仅可以匹配更精确,还能加速正则
xylophone21
2014-08-21 13:03:37 +08:00
@bindiry
@alexapollo
的答案都破不了这种情况:
<a href="http://news.hsw.cn/system/more/25330000/0000/25330000_00000010.shtml">\n
下 一 页 < / a >

即">下一页</a>"
这几个字符中都可能插入回车,甚至空格都不影响实际使用.
正则之前把回车空格神马的都去掉吧.

另外,你确定前面的a标签url都是news.hw.cn开头的?确定不会有别的属性?
CosWind
2014-08-21 13:07:03 +08:00
@csensix http://stackoverflow.com/questions/6654834/difference-between-1-vs-1-in-htaccess
貌似要结合RewriteCond 看。Apache的官方文档应该是不错的参考资料。。
CosWind
2014-08-21 13:10:34 +08:00
CosWind
2014-08-21 13:12:28 +08:00
@endoffight 正则是贪心的,这样肯定匹配的比较多吧。
CosWind
2014-08-21 13:20:25 +08:00
/"([^"]*)">\s*下\s*一\s*页/这样可以么
diaoleona
2014-08-21 22:49:35 +08:00
为何不用xpath
endoffight
2014-08-24 13:31:37 +08:00
@diaoleona 你确定Xpath能解决吗?
WKPlus
2014-08-28 23:47:42 +08:00
虽然你加了?,表示非贪心的匹配方式,但是误解了贪心的意思,第三行还是会匹配到。

13楼说的不错,把.*?改为[^\"]*就可以了。

其实你都用python了,干嘛不用BeautifulSoup?用正则解析html吃力不讨好啊
endoffight
2014-08-30 07:26:42 +08:00
@WKPlus 当时追求快,懒得安装bs😁

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX