我正在使用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地址的特定字符串。 谢谢你的帮助!
答案 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+)
在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
代替match
。 rstrip()
用于删除行尾字符(例如\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