aingwen 发表于 2014-11-05 10:51

re.search 为什么同样的只匹配部分

本帖最后由 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如下:#!/usr/bin/env python

import re
import os

f = open("1.log",'r')
for line in (f.readlines()):
    k=re.search(r'(MAC:)\w+',line)
    print k.group(0)
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'
不明白这是为什么后面那两行里的不能打印出来?求大神指点

whitelotus19 发表于 2014-11-05 11:44

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

text='''
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
'''
print '\n'.join(re.findall('MAC:\w+',text))
print

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

aingwen 发表于 2014-11-05 11:57

回复 2# whitelotus19 print '\n'.join(re.findall('MAC:\w+',text))这个不错,无论中间是空行还是无匹配的对象都能得到正确结果,反而用group() 只要有一行没有匹配的内容它就是空值就报错不继续执行了,非常感谢大神的两个方法,学习了

HH106 发表于 2014-11-05 13:57

回复 1# aingwen
中间有空行,加个判断就行了for line in (f.readlines()):
    k=re.search(r'(MAC:)\w+',line)
    if k is not None:
      print k.group(0)

whitelotus19 发表于 2014-11-06 11:35

回复 3# aingwen


互相学习:emn35:   

pitonas 发表于 2014-11-06 14:13

这个不错,非常感谢大神的方法,学习了~ {:2_168:}
回复 2# whitelotus19


   
页: [1]
查看完整版本: re.search 为什么同样的只匹配部分