如何在一个字符串会话输出中搜索一个字符串,其中x是1到99999之间的数字?

时间:2016-04-18 14:35:31

标签: python python-2.7 module telnet telnetlib

import getpass
import sys
import telnetlib
import re
import smtplib

print "Pasul 1"

HOST = "route-views.routeviews.org"
user = "rviews"
password = ""

tn = telnetlib.Telnet(HOST)

tn.read_until("login: ", 5)
tn.write(user + "\r\n")

tn.read_until("Password: ", 5)
tn.write(password + "\r\n")

print tn.read_until(">", 10)
tn.write("show ip route 192.0.2.1"+"\r\n")

y = tn.read_until("free", 10)
print y
tn.write("exit"+ "\r\n")

tn.close()

print "Pasul 2"

for x in range(1,99999):
    m = re.search(' Known via "bgp xxxxx"', y)
    if m:
        print (m.group(0))
        break
    else:
        print False
        break

x必须是1到99999之间的数字 如果我写'已知通过'bgp 6447“'它将找到并打印它,但如果我写'已知通过'bgp xxxxx”',它返回false。谁知道为什么?

输出是这样的:

路线的视图>

show ip route 192.0.2.1

192.0.2.1/32的路由条目

通过“bgp 6447”已知,距离20,公制0

标记19214,输入外部

最后更新自208.74.64.40 4w0d前

路由描述符块:

  • 208.74.64.40,来自208.74.64.40,4w0d前

    路由度量为0,流量共享计数为1

    AS Hops 1

    路线标记19214

    MPLS标签:无

路线的视图>

2 个答案:

答案 0 :(得分:0)

如果我测试

,它会给我'真'
>>> y = ' Known via "bgp xxxxx"'
>>> re.search('Known via "bgp xxxxx"', y)

>>> if x:
...     print "yes"
...
yes

答案 1 :(得分:0)

你以完全错误的方式使用正则表达式,尝试更改整个部分:

for x in range(1,99999):
    m = re.search(' Known via "bgp xxxxx"', y)
    if m:
        print (m.group(0))
        break
    else:
        print False
        break

以下:

m = re.search(r'Known via "bgp \d{0,5}"', y)
if m:
   print m.group(0)
else:
   print False

在表达之前注意r,这在这里很重要。

可能你应该阅读python re模块的这个文档:https://docs.python.org/2/library/re.html

更新。顺便说一句,您的版本不起作用,因为字符串中的x被解释为文字"x",而不是变量x的值。如果要将变量放在字符串中,则应使用格式,如下例所示:

x = 12345
print ' Known via "bgp {}"'.format(x)