正则比 xpath 快好多哦,顺便问一个很初级的正则问题。

2019-10-28 19:14:58 +08:00
 JCZ2MkKb5S8ZX9pq
# Python 3.7

body = '<img src="https://tvax2.xximg.cn/crop.0.0.1242.1242.50/?????.jpg?KID=imgbed" alt="头像" class="por" /><img src="https://h5.xximg.cn/upload/2016/05/26/319/5547.gif" alt="达人" />'

re_icon = re.compile(r'src="(.*?)" alt="(?:V|达人)"')
v_icon = re_icon.search(body)
[print(i) for i in v_icon.groups()]

关于 xpath 和正则

3366 次点击
所在节点    正则表达式
27 条回复
tsohgdivil
2019-10-28 20:58:00 +08:00
而且情况简单还好,如果情况比较复杂,就算你再怎么精通正则,也不太可能写出一个完全“正确”的正则出来,最多写一个在特定情况下能够取出来正确值的正则,但是总是会出现 edge case
JCZ2MkKb5S8ZX9pq
2019-10-28 21:02:38 +08:00
@tsohgdivil

我是菜鸟,讨论能帮助我更好地理解。
层数多是我水平的问题,未必是正则不如 xpath 好用。

你的两层回复都没有任何实际的帮助。
书我看过了,没看懂,所以才又碰到问题来请教。
通过 eason 的热心回复,帮助我在很短时间就明白了问题所在。这就是提问的价值。

你提出正则会有很多意外,这个观点本身是没问题的。
但后续部分,如果你同样打这么多字,能提供一些有效的帮助,那我会更加欢迎。
tsohgdivil
2019-10-28 21:04:14 +08:00
@JCZ2MkKb5S8ZX9pq #22
好的,对不起,下次我尽量简短一点。我想说的就是“看书就完了”,不然这个坑踩了还有无数坑等着。
JCZ2MkKb5S8ZX9pq
2019-10-28 21:05:33 +08:00
@tsohgdivil 书我看过了,没看懂,所以才又碰到问题来请教。
tsohgdivil
2019-10-28 21:06:25 +08:00
推荐《精通正则表达式》
tsohgdivil
2019-10-28 21:08:25 +08:00
@JCZ2MkKb5S8ZX9pq #24
你可以看下这本书,像这种问题在里面有很多讨论,里面详细讲解了正则的匹配过程。看完基本上可以自己写一个正则引擎了。
ClericPy
2019-10-28 21:10:37 +08:00
哈哈, 你拿一个 C 写的东西和一个 py 写的东西怎么比...
很多问题等你多用几年就自然理解了, 比性能是不能跨语言比的, 要比也得 lxml 和 re 比

不过算法不同, 就算用 lxml, Xpath 解析也比 re 慢的, 光假装构建个 DOM 就费老劲了, 别忘了 Element 还有一大堆绑定方法, 用途不一样, 就别和性能较劲了

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

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

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

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

© 2021 V2EX