求问针对 html 标签<em>的正则表达式的写法。。。

2018-08-26 21:06:48 +08:00
 pppguest3962

实在写不出来,你看我都发贴求问了。。。。喵~

<em class="xyz ">utxu2zy</em>

求两种写法, 目的只有一个:匹配 em 标签区段的内容,

内容有可能什么字符(包括全半角或者制表符、回车什么的)都可能会有

1、确定是 class 属性绝对是"xyz ",z 后面有空格的正则匹配写法?

2、class 属性无法确定,属性的内容也是什么英文数字都有可能,的正则匹配写法?

2867 次点击
所在节点    问与答
8 条回复
yanaraika
2018-08-26 21:57:08 +08:00
1. html 文法理论上无法用非魔改正则匹配
2. 用条件引用之类的魔改正则可以做到,随便搜一下就有 http://www.imkevinyang.com/2009/07/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%B5%8C%E5%A5%97html%E6%A0%87%E7%AD%BE.html
3. 但 2 的写法又臭又长,为什么不丢进 beautifulsoup 里用 CSS selector
lazyboy
2018-08-26 22:17:19 +08:00
<(em)[^>]*?class="xyz\s"[^>]*?>[^<]*?<\/\1>
leafiy
2018-08-26 22:18:03 +08:00
.$? 加上 em ?
lazyboy
2018-08-26 22:18:14 +08:00
<(em)[^>]*?>[^<]*?<\/\1>
des
2018-08-26 22:30:40 +08:00
同一楼,不要用正则
爬虫用正则很容易出问题,并且正则也难写,一旦碰到问题就傻眼了,根本没法改和维护。除非就只用一次,根本不用维护
同一楼,老老实实用 Beautiful Soup 不行吗?
jjplay
2018-08-26 22:38:21 +08:00
不要死盯着这个 class,可以从他的父级 class 来定位
simoncc
2018-08-27 01:13:25 +08:00
用 lxml 吧,解析速度快,使用也方便,控制台选中元素右键 copy xpath 即可
delectate
2018-08-27 06:59:30 +08:00
>>> import re
>>> a='<em class="xyz ">utxu2zy</em>'
>>> re.findall(r'<em class="xyz.?">(.*)<\/em>',a, re.I)
>>> a='<em class="xxxxx">utxu2zy</em>'
>>>>>> re.findall(r'<em class=".*">(.*)<\/em>',a, re.I)

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

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

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

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

© 2021 V2EX