具有负匹配的Python正则表达式

时间:2015-02-24 18:30:09

标签: python regex

我有一个以下文本文件 sample.txt

xe-4/3/1.1596
xe-4/3/1.1528
ae2.670
xe-4/3/1.1503
ae2
xe-4/3/1.1478
xe-4/3/1.1475
xe-4/3/1.1469
xe-4/3/1
xe-4/3/1.3465
xe-4/0/0.670
xe-4/0/0
xe-4/3/1.1446
xe-4/0/0.544
xe-4/3/1.1437
gr-5/0/0
gr-5/0/0.10
lo0.16384
lo0.16385
em1
em1.0
cbp0
demux0
irb
pip0
pp0
ae0

这是路由器的接口列表。 我需要打印出包含以下内容的行(接口): xe,ae,gr 但是那些不包含点的行,例如 xe-4/3/1 gr-5/0/0 ae2 等。

尝试以下代码但不起作用:

import re

file = open('sample.txt','r')
string = file.read()

for f in string:
    matchObj = re.findall("(xe|ae|gr)[^.]*$", f)
    if matchObj:
        print f

http://regexr.com/检查了我的正则表达式(xe | ae | gr)[^。] * $ ,它与我想要的行匹配。你能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:2)

for f in string:将迭代文件中的字符;你想迭代线。我建议使用以下代码:

# use the with statement to open the file
with open('sample.txt') as file:
    for line in file:
        # use re.search to see if there is match on the line;
         # but we do not care about the actual matching strings
        if re.search("(xe|ae|gr)[^.]*$", line):
            print line