关于 python 正则表达式

2016-03-17 15:41:10 +08:00
 ech0x

代码如下

attern=re.compile(r'<a href="member_illust.php?mode=medium&amp;illust_id= (\d+*)"')

print re.findall(pattern,request)

使用了 re 模块,想要匹配出<a href="member_illust.php?mode=medium&amp;illust_id=55836818"的 id 号,请问这里的正则表达式应该怎么写,另求好的正则表达式教程。

1699 次点击
所在节点    问与答
10 条回复
UnisandK
2016-03-17 15:42:45 +08:00
clino
2016-03-17 15:44:41 +08:00
建议用 kodos 调试正则
\d+* 这里不能既用+又用*吧
ech0x
2016-03-17 15:45:56 +08:00
@clino 是这里写错了。。。。。没注意到,谢了
vmebeh
2016-03-17 15:53:00 +08:00
```attern=re.compile(r'illust_id\=(\d+)')```
V 站会自动在英文字符周围加空格,上面没有任何空格

illust_id 应该已经很特殊,不需要跟多关键字了
ech0x
2016-03-17 15:56:42 +08:00
@vmebeh 对,所以我已近简化成 illust_id= (\d*)了
ech0x
2016-03-17 16:09:25 +08:00
@vmebeh 如果要匹配这个地址 http://i3.pixiv.net/c/600x300/img-master/img/2016/03/16/01/57/24/( id 号)_p0_master1200.jpg ,正则怎么写?
vmebeh
2016-03-17 16:30:53 +08:00
r'img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(\d+)_'

不变且唯一的部分作为关键字,变化的部分用正则,需要提取的内容再加括号
ech0x
2016-03-17 16:35:32 +08:00
@vmebeh 需要提取的内容加括号那我是不是可以写成( http://i\d.pixiv.net/c/\d+x\d+/img-master/img/\d+/\d+/\d+/\d+/\d+/\d+/(\d+)*.jpg)这样就可以提取整个网站了
vmebeh
2016-03-17 16:46:17 +08:00
要是匹配一条 url 有别的更好的写法,比如图片 r'( https{0,1}://.+?\.jpg)'

Python2 自带了一个正则表达式测试工具,在安装目录的 .\Tools\Scripts\redemo.py
附一个文档
http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
wwxiong
2016-03-18 09:22:01 +08:00
你需要用费贪婪模式的。 试试 re.compile(r'illust_id=(\d*?)')

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

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

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

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

© 2021 V2EX