鱼C论坛

 找回密码
 立即注册
查看: 2533|回复: 15

这个正则要如何写 比较简洁呢?

[复制链接]
发表于 2017-10-28 22:02:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 要学习 于 2017-10-29 00:06 编辑

请各位老师帮忙。。。谢谢


首先我 的测试:


  1. r'<p class="bwi .*?">(.*?)</p>'
复制代码


  1. [ u'\r\n\t\t\t\t         \t21', u'\r\n\t\t\t\t         \t02', u'\r\n\t\t\t\t         \t11', u'\r\n\t\t\t\t         \t17', u'\r\n\t\t\t\t         \t13', u'\r\n\t\t\t\t         \t15', u'\r\n\t\t\t\t         \t26']
复制代码


怎么得到的结果前面有
  1. \r\n\t\t\t\t         \t
复制代码

这个是什么东东呢。

我删除了一下特殊字符

re.sub(r"[\r,\t,\n]","",html)

但还是有一个‘         ‘

  1. [u'         21', u'         02', u'         11', u'         17', u'         13', u'         15', u'         26']
复制代码



要爬取的代码如下:


  1. <td class="tdbbq tdbr">8999850</td>
  2.                             <td class="tdbbq tdbr">
  3.                                        <div class="w22d">
  4.                                          <p class="bwi kgbx20">
  5.                                                  21</p>
  6.                                        </div>
  7.                                        <p>
  8.                                                    中文
  9.                                                        中文
  10.                                        </p>
  11.                                     </td>
  12.                             <td class="tdbbq tdbr">
  13.                                        <div class="w22d">
  14.                                          <p class="bwi krbx20">
  15.                                                  02</p>
  16.                                        </div>
  17.                                        <p>
  18.                                                    中文
  19.                                                        中文
  20.                                        </p>
  21.                                     </td>
  22.                             <td class="tdbbq tdbr">
  23.                                        <div class="w22d">
  24.                                          <p class="bwi kgbx20">
  25.                                                  11</p>
  26.                                        </div>
  27.                                        <p>
  28.                                                    中文
  29.                                                        中文
  30.                                        </p>
  31.                                     </td>
  32.                             <td class="tdbbq tdbr">
  33.                                        <div class="w22d">
  34.                                          <p class="bwi kgbx20">
  35.                                                  17</p>
  36.                                        </div>
  37.                                        <p>
  38.                                                    中文
  39.                                                        中文
  40.                                        </p>
  41.                                     </td>
  42.                             <td class="tdbbq tdbr">
  43.                                        <div class="w22d">
  44.                                          <p class="bwi krbx20">
  45.                                                  13</p>
  46.                                        </div>
  47.                                        <p>
  48.                                                    中文
  49.                                                        中文
  50.                                        </p>
  51.                                     </td>
  52.                             <td class="tdbbq tdbr">
  53.                                        <div class="w22d">
  54.                                          <p class="bwi kbbx">
  55.                                                  15</p>
  56.                                        </div>
  57.                                        <p>
  58.                                                    中文
  59.                                                        中文
  60.                                        </p>
  61.                                     </td>
  62.                             <td class="tdbbq tdbr">
  63.                                        <div class="w22d">
  64.                                          <p class="bwi kbbx">
  65.                                                  26</p>
复制代码


最后要得到的结果应为::  [u'8999850',u'21',u'02',u'11',u'17',u'13',u'15',u'26']

要如何写这个正则比较简洁?


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-10-29 00:05:40 | 显示全部楼层

我删除了一下特殊字符

re.sub(r"[\r,\t,\n]","",html)

但还是有一个

  1. [u'         21', u'         02', u'         11', u'         17', u'         13', u'         15', u'         26']
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-29 15:06:11 | 显示全部楼层
哪位老师指点一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-29 20:25:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-29 22:45:00 | 显示全部楼层
  1. r = re.findall(r'(\d+)</(td|p)>',html)
  2. print( [i[0] for i in r])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-30 00:46:26 | 显示全部楼层

非常感谢。。

刚测试了一下代码,很强大很简洁的代码。。。

若我只要前面8列的数据呢?
不要红色框的数据

QQ截图20171030004455.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-30 08:36:01 | 显示全部楼层
  1. r = re.findall(r'(\d+)</(td|p)>',html)
  2. print( [i[0] for i in r][:8])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-30 08:50:04 | 显示全部楼层

老师早上好。。。

刚测试代码。

能得到只去前8列的数据了,但不能循环了。只得到第一行数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-30 09:20:09 | 显示全部楼层
要学习 发表于 2017-10-30 08:50
老师早上好。。。

刚测试代码。

唉,这都不会自己变通哦
  1. print([i[0][:8] for i in r])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-30 09:24:20 | 显示全部楼层
r'<(?:td|p)[^>]+>\s*(\d*)</(?:td|p)'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-30 11:02:13 | 显示全部楼层
本帖最后由 要学习 于 2017-10-30 11:12 编辑
ooxx7788 发表于 2017-10-30 09:20
唉,这都不会自己变通哦


老师好。。

我现在刚知道 列表推导式。。

不懂变通呢。

刚测试的结果:

  1. [u'8999850', u'21', u'02', u'11', u'17', u'13', u'15', u'26', u'105', u'6', u'2', u'3', u'3', u'8999851', u'09', u'08', u'28', u'17', u'15', u'12', u'33', u'122', u'5', u'3', u'3', u'4', u'0', u'2', u'1', u'1', u'4', u'0', u'0', u'0', u'4', u'0', u'1', u'1', u'1', u'2', u'3', u'4', u'6', u'7', u'8', u'9', u'10', u'11']
复制代码


[:8]没有起作用哦


之前的代码,
  1. r = re.findall(r'(\d+)</(td|p)>',html)
  2. print( [i[0] for i in r][:8])
复制代码

得到的结果

  1. [u'8999850', u'21', u'02', u'11', u'17', u'13', u'15', u'26']
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-30 11:02:54 | 显示全部楼层

感谢老师的指点。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-30 17:12:32 | 显示全部楼层

老师好,
你的正则表达式。能不能改成这样:

前面判断是否为7位数字,后面的 判断是否为 两位数字的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-31 09:12:12 | 显示全部楼层
额,我的理解能力很差,所以我不知道你说的什么,之前的题目是ooxx大佬解释了很多次以后,我才明白你的目的...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-31 10:06:34 | 显示全部楼层
xuanmuluck 发表于 2017-10-31 09:12
额,我的理解能力很差,所以我不知道你说的什么,之前的题目是ooxx大佬解释了很多次以后,我才明白你的目的...

是我的表达能力的问题。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-31 12:47:38 | 显示全部楼层
要学习 发表于 2017-10-31 10:06
是我的表达能力的问题。


不是,是我的语言理解能力很差...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 14:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表