
实在写不出来,你看我都发贴求问了。。。。喵~
<em class="xyz ">utxu2zy</em> 求两种写法, 目的只有一个:匹配 em 标签区段的内容,
内容有可能什么字符(包括全半角或者制表符、回车什么的)都可能会有
1、确定是 class 属性绝对是"xyz ",z 后面有空格的正则匹配写法?
2、class 属性无法确定,属性的内容也是什么英文数字都有可能,的正则匹配写法?
1 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 |
2 lazyboy 2018-08-26 22:17:19 +08:00 <(em)[^>]*?class="xyz\s"[^>]*?>[^<]*?<\/\1> |
3 leafiy 2018-08-26 22:18:03 +08:00 via Android .$? 加上 em ? |
4 lazyboy 2018-08-26 22:18:14 +08:00 <(em)[^>]*?>[^<]*?<\/\1> |
5 des 2018-08-26 22:30:40 +08:00 via Android 同一楼,不要用正则 爬虫用正则很容易出问题,并且正则也难写,一旦碰到问题就傻眼了,根本没法改和维护。除非就只用一次,根本不用维护 同一楼,老老实实用 Beautiful Soup 不行吗? |
6 jjplay 2018-08-26 22:38:21 +08:00 不要死盯着这个 class,可以从他的父级 class 来定位 |
7 simoncc 2018-08-27 01:13:25 +08:00 用 lxml 吧,解析速度快,使用也方便,控制台选中元素右键 copy xpath 即可 |
8 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) |