【问题标题】:find something in a string then print it in python在字符串中找到一些东西然后在 python 中打印它
【发布时间】:2014-12-05 17:19:55
【问题描述】:

我确定这很简单,但我不擅长正则表达式或字符串操作,我想学习 :)

我有一个使用 simpy 得到的字符串的输出。它看起来像这样:

ARRIS DOCSIS 3.0 Touchstone WideBand Cable Modem <<HW_REV: 1; VENDOR: Arris Interactive, L.L.C.; BOOTR: 1.2.1.62; SW_REV: 7.3.123; MODEL: CM820A>>

我希望能够查看该字符串并在 if 中使用该信息,然后打印一些内容。我想查看型号是否为 CM820A,然后检查固件版本 SW_REV,如果它不是正确的版本,我想打印版本,否则我继续从循环中获取下一个字符串。
host.sysDescr 它返回上面的字符串。到目前为止,我知道如何找到所有 CM820A,但是当我尝试验证固件版本时,我变得草率。

sysdesc = host.sysDescr
if "CM820A" in str(sysdesc):        
    if "7.5.125" not in str(sysdesc):
        print("Modem CM820A " + modem + " at version " + version)
        print(" Sysdesc = " + sysdesc)
    if "7.5.125" in sysdesc:
        print ("Modem CM820A " + modem + " up to date")

现在我可以轻松查看 CM820A 是否有正确的版本,但我不能只打印坏调制解调器的版本。我只能打印包含大量无用信息的整个字符串。我只想打印该字符串 SW_REV 值。

问题

我需要有关如何做到这一点的帮助,然后我会更好地理解并能够重写我目前仅用于学习 Python 但我想将其付诸实践以用于有用的目的。

【问题讨论】:

  • 而不是if "7.5.125" in sysdesc: 使用else 子句。
  • 如果不是这样,能否给出当前输入输出和预期输出?

标签: python regex snimpy


【解决方案1】:

你只需要split(),你可以用特殊字符分割你的字符串,例如看下面:

>>> l= s.split(';')
['ARRIS DOCSIS 3.0 Touchstone WideBand Cable Modem <<HW_REV: 1', ' VENDOR: Arris Interactive, L.L.C.', ' BOOTR: 1.2.1.62', ' SW_REV: 7.3.123', ' MODEL: CM820A>>']

>>> for i in l :
...  if 'BOOTR' in i:
...   print i.split(':')
... 
[' BOOTR', ' 1.2.1.62']

那么你可以通过索引轻松获得第二个元素!

【讨论】:

  • @JasonKack 你来了,所以如果你觉得这个答案有帮助,你可以通过接受它或投票告诉社区!
【解决方案2】:

这个答案将简单地解释如何检索您想要的信息。 您需要对数据执行多次拆分

首先,我注意到您的字符串信息由分号细分。 所以:

description_list = sysdesc.split(";")

将创建一个主要部分的列表。由于 sysdesc 字符串具有标准格式,因此您可以访问正确的子字符串:

sub_string = description_list[3]

现在,用冒号分割子字符串:

revision_list = sub_string.split(":")

现在,只是参考:

revision_list[1]

只要你想打印它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2020-09-28
    相关资源
    最近更新 更多