免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3709 | 回复: 5
打印 上一主题 下一主题

re.search 为什么同样的只匹配部分 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-05 10:51 |只看该作者 |倒序浏览
本帖最后由 aingwen 于 2014-11-05 11:07 编辑

文本1.log内容如下:
218.94.54.202=====MAC:0007E95E4B00                ========
220.179.174.91===== MAC:000B2F1E1470         =====

20 218.75.35.85                     MAC:0007E90DB590         
28 119.41.26.229           MAC:0007E90DE5AF
要得到的结果是
MAC:0007E95E4B00
MAC:000B2F1E1470
MAC:0007E90DB590
MAC:0007E90DE5AF

我写的脚本test.py如下:
  1. #!/usr/bin/env python

  2. import re
  3. import os

  4. f = open("1.log",'r')
  5. for line in (f.readlines()):
  6.     k=re.search(r'(MAC:)\w+',line)
  7.     print k.group(0)
  8. f.close()
复制代码
MAC:0007E95E4B00
MAC:000B2F1E1470
Traceback (most recent call last):
  File "test.py", line 8, in ?
    print k.group(0)
AttributeError: 'NoneType' object has no attribute 'group'
不明白这是为什么后面那两行里的不能打印出来?求大神指点

论坛徽章:
0
2 [报告]
发表于 2014-11-05 11:44 |只看该作者
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. import re

  4. text='''
  5. 218.94.54.202=====MAC:0007E95E4B00                ========
  6. 220.179.174.91===== MAC:000B2F1E1470         =====

  7. 20 218.75.35.85                     MAC:0007E90DB590         
  8. 28 119.41.26.229           MAC:0007E90DE5AF
  9. '''
  10. print '\n'.join(re.findall('MAC:\w+',text))
  11. print

  12. for line in text.strip().split('\n'):
  13.     if not line.strip():
  14.         continue
  15.     #print line
  16.     print re.search(r'(MAC:)\w+',line).group(0)

复制代码

论坛徽章:
0
3 [报告]
发表于 2014-11-05 11:57 |只看该作者
回复 2# whitelotus19
  1. print '\n'.join(re.findall('MAC:\w+',text))
复制代码
这个不错,无论中间是空行还是无匹配的对象都能得到正确结果,反而用group() 只要有一行没有匹配的内容它就是空值就报错不继续执行了,非常感谢大神的两个方法,学习了

论坛徽章:
9
2015亚冠之阿尔纳斯尔
日期:2015-09-10 16:21:162015亚冠之塔什干火车头
日期:2015-07-01 16:23:022015年亚洲杯之巴勒斯坦
日期:2015-04-20 17:19:46子鼠
日期:2014-11-13 09:51:26未羊
日期:2014-08-28 18:13:36技术图书徽章
日期:2014-02-21 09:30:15酉鸡
日期:2014-01-14 11:12:49天蝎座
日期:2013-12-09 17:56:53平安夜徽章
日期:2015-12-26 00:06:30
4 [报告]
发表于 2014-11-05 13:57 |只看该作者
回复 1# aingwen
中间有空行,加个判断就行了
  1. for line in (f.readlines()):
  2.     k=re.search(r'(MAC:)\w+',line)
  3.     if k is not None:
  4.         print k.group(0)
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-11-06 11:35 |只看该作者
回复 3# aingwen


互相学习     

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
6 [报告]
发表于 2014-11-06 14:13 |只看该作者
这个不错,非常感谢大神的方法,学习了~ {:2_168:}
回复 2# whitelotus19


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP