提取与IP地址匹配的行

时间:2016-03-16 02:29:38

标签: python regex ip-address python-2.x

我正在使用python来查找与IP地址的特定模式匹配的行。

f = open('file.txt','r')
for line in f:
    if line.find("N2:42.61.0.69")
        print line

我想要匹配的模式是"node number":"IP address",其中 "node number"是字母“N'接下来是一个数字'。如N23,N456,N98765等

我使用了模式N2:42\.61\.0\.69,但它没有产生任何结果。

大多数示例都讨论了匹配特定模式的正则表达式,例如IP地址"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"

但在这里我想匹配具有IP地址的特定字符串。 谢谢你的帮助!

4 个答案:

答案 0 :(得分:1)

函数find():

  

返回s中找到substring sub的最低索引,使得sub完全包含在s [start:end]中。失败时返回-1。开始和结束的默认值以及负值的解释与切片相同。

因此,如果要查找包含给定字符串的行(" N2:42.61.0.69"在您的情况下),条件应为:

if line.find("N2:42.61.0.69") != -1:

答案 1 :(得分:0)

你在找这个:

(?:^|\s*)N\d+:(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:$|\s+)

REGEX 101 DEMO

在python 2.7中,要使用示例中的模式,您可以:

import re
p = '(?:^|\s*)N\d+:(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9]).){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:$|\s+)'
with open('file.txt', 'r') as f:
    print [line.strip() for line in f.readlines() if re.findall(p, line) ]

答案 2 :(得分:0)

如果我理解您的问题,节点的值可能会更改,但IP地址的值已知并已修复。由于点在正则表达式中具有特殊含义,因此必须在之前放置反斜杠。

import re
REGEX = re.compile( r"^N\d+:42\.61\.0\.69$" )
f = open('file.txt','r')
for line in f:
    line = line.strip()  
    if REGEX.match(line):
        print line
f.close()

请注意使用原始字符串(r" ..."),如果没有,则所有反斜杠都需要出现两次(\\)。此外,开头的^和结尾的$用于匹配整行。如果其他文字可以显示在行中,则可以将其删除并使用search代替matchrstrip()用于删除行尾字符(例如\n)。

与以下数据一起使用时(file.txt)的内容

N1:42.61.0.69
N2:10.0.0.1
N123456:42.61.0.69

它只打印第一行和第三行

答案 3 :(得分:0)

如果您希望一次处理file.txt一行,则以下内容应该有效:

import re

with open('file.txt') as f_input:
    for line in f_input:
        match = re.search(r'(.*?(N\d+):42\.61\.0\.69 .*?)', line)

        if match:
            line, node_number = match.groups()
            print "{} found in {}".format(node_number, line)

鉴于file.txt包含以下内容:

link L518523: N1:42.61.0.69 N248066
non matching line
link L518533: N2:42.61.0.69 N248066
link L518553: N3:43.61.0.69 N248066
link L518553: N4:42.61.0.69 N248066

您将获得以下输出:

N1 found in link L518523: N1:42.61.0.69 
N2 found in link L518533: N2:42.61.0.69 
N4 found in link L518553: N4:42.61.0.69