新手请教正则提取

2016-08-01 09:20:52 +08:00
 zhongshaohua
<img class="BDE_Image" src="http://imgsrc.baidu.com/forum/w%3D580/sign=2e8f3ca53af33a879e6d0012f65d1018/4ece3bc
79f3df8dc2ab63004cd11728b46102899.jpg" width="560" height="400" changedsize="true">
想提取 src 中的链接 reg = r'src="(.*?\.jpg)" width'
为什么 r'src="(.*?\.jpg)"' 和 r'src="(.*\.jpg)" width' 这样不行?
3024 次点击
所在节点    Python
14 条回复
zhongshaohua
2016-08-01 09:24:33 +08:00
用的是 findall
laoyur
2016-08-01 09:26:48 +08:00
源码中有换行,你得使用 single line 模式
lxy
2016-08-01 09:34:23 +08:00
加 re.S
或者用这个: r'src="([^"]+)"'
zhongshaohua
2016-08-01 10:30:28 +08:00
@lxy 谢谢 但是你这样为什么没有匹配引号呢? 因为你是^" 这样是匹配引号开头吧?
CosimoZi
2016-08-01 10:44:52 +08:00
不要用正则匹配 html
linesh
2016-08-01 10:51:49 +08:00
我在这里试了一下你的表达式,是可以的: http://regexr.com/

所以可能的原因有:
* 是否忘记了加 g 参数表示 global ,匹配多行?
* 是否可能是 Python 正则有其方言或者独特语法?
lllooo
2016-08-01 10:53:19 +08:00
不要用正则匹配 html 。
https://pypi.python.org/pypi/beautifulsoup4
amustart
2016-08-01 10:55:58 +08:00
不要用正则匹配 html +1 ,我记得 re 的作者?一直在吐槽这个,你要解析 html 就不能用 beautifulSoup 和其他 HTML 解析器么
PS : 练手和网页写的渣另算
lxy
2016-08-01 10:59:12 +08:00
@zhongshaohua ^ 表示非,那句就表示匹配所有非双引号的字符。
imn1
2016-08-01 11:16:46 +08:00
@amustart
PS : 练手和网页写的渣另算
=======================
不敢苟同

你知道加载 DOM 需要耗费多少时间和内存么?试试 parse 百万个 html 和只用 regex 比较一下?
CharlesL
2016-08-01 11:52:49 +08:00
http://www.txt2re.com/index.php3
试试这个正则表达式生成器
z5864703
2016-08-01 16:47:23 +08:00
@imn1 +10086
ImPerat0R
2016-08-01 22:15:17 +08:00
slysly759
2016-08-05 14:05:29 +08:00
# 我个人建议如下:
1. 不到万不得已不用正则表达式
2. 正则表达式对正文搜索支持和网页数据提取非常不友好
3. 网页建议使用 xpath ,美丽鸡汤我个人觉得不好用。
4. xpath 在 Google 有 xpath helper 非常好用,获取哪里点哪里,妈妈再也不用担心我的数据抓取了
5. 第四条的插件目前只能在 51.xGoogle chrome 以下使用。
6. 如果非要用正则表达式,那么有一个坑爸爸的正则表达式测试器供你使用。为什么坑爸爸,因为我经常自己写的在测试器可以,但是 python 私活不认,这不,刚买了新电脑。

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

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

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

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

© 2021 V2EX