简体   繁体   English

你如何返回在 python 中用 re.search 找到的字符串?

[英]How do you return a string found with re.search in python?

So this is my code:所以这是我的代码:

class telnet(object):
    """conexiune"""
    def __init__(self):

        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")

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

        tn.close()

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

What I need to do is return self.m instead of printing it.我需要做的是返回 self.m 而不是打印它。 If I write 'return "This answer is: "+self.m', I get this error:如果我写'return "This answer is: "+self.m',我会收到这个错误:

return "The answer is: " + self.m.group(0) TypeError: cannot concatenate 'str' and '_sre.SRE_Match' objects返回“答案是:” + self.m.group(0) TypeError: cannot concatenate 'str' and '_sre.SRE_Match' objects

If I use print it prints it, but I don't know how to do it with a return statement.如果我使用 print 它会打印它,但我不知道如何使用 return 语句来做到这一点。

This is what it has to return:这是它必须返回的内容:

Known via "bgp 6447"通过“bgp 6447”已知

from this telnet output: route-views> show ip route 192.0.2.1从这个 telnet 输出:route-views> show ip route 192.0.2.1

Routing entry for 192.0.2.1/32 192.0.2.1/32 的路由条目

Known via "bgp 6447", distance 20, metric 0通过“bgp 6447”已知,距离 20,公制 0

Tag 19214, type external标签 19214,类型外部

Last update from 208.74.64.40 4w1d ago最后更新来自 208.74.64.40 4w1d 前

Routing Descriptor Blocks:路由描述符块:

  • 208.74.64.40, from 208.74.64.40, 4w1d ago 208.74.64.40, 从 208.74.64.40, 4w1d 前

    Route metric is 0, traffic share count is 1路由度量为 0,流量份额计数为 1

    AS Hops 1 AS 啤酒花 1

    Route tag 19214路由标签 19214

    MPLS label: none MPLS 标签:无

route-views>路线视图>

I know that return is used for functions - that's why I added the '+'.我知道 return 用于函数 - 这就是我添加“+”的原因。 Btw I'm a Python beginner.顺便说一句,我是 Python 初学者。 Any help would be appreciated.任何帮助,将不胜感激。

I think in your 'return' statement you just missed out the '.group(0)'.我认为在您的“返回”声明中,您只是错过了“.group(0)”。

Try :尝试 :

if self.m:
   return self.m.group(0)

From documentation从文档

>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0)       # The entire match
'Isaac Newton'
>>> m.group(1)       # The first parenthesized subgroup.
'Isaac'
>>> m.group(2)       # The second parenthesized subgroup.
'Newton'
>>> m.group(1, 2)    # Multiple arguments give us a tuple.
('Isaac', 'Newton')

So, try this所以,试试这个

>>> import re
>>> y = ' Known via "bgp 54574"'
>>> m = re.search(r' Known via "bgp (\d{0,5})"', y)
>>> print m.group(1) if m else False
54574
>>> y = ' Known via "bg p 54574"'
>>> m = re.search(r' Known via "bgp (\d{0,5})"', y)
>>> print m.group(1) if m else False
False
>>> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM