繁体   English   中英

如何搜索字符串,提取一部分并将其用作变量

[英]How to search a string, pull a piece of it, and use it as a variable

我正在使用路由器配置,需要编写Python脚本来遍历配置文件,在特定字符串中搜索特定项目(在这种情况下为IP地址),将其存储为变量,然后在另一个字符串中使用该变量。 例如:

interface Vlan88
  ip address 12.37.221.1 255.255.255.0
  !
  !
  standby 1 ip (insert ONLY 12.37.221.1 here)

并对所有其他接口执行相同的操作

我会说实话。...目前尝试== 0,因为这超出了我的知识水平。 但是,我正在使用正则表达式替换一些帮助程序地址以及编写HSRP配置部分。 但是,我还远远不知道如何搜索特定的东西并将其变成变量。

您应该首先检查该字符串是否存在于您的配置文件中,如果存在,请连接到另一个字符串:

if <STRING> in open(<CONFIG FILE>).read():
      ip = <STRING>
     some_other_string += ip

欢迎使用Stack Overflow!

对于这个问题,您可以...

  • 将配置文件数据加载到字符串变量中,也许是contents
  • 使用.find()字符串方法搜索特定的关键字,例如ip address
  • 使用索引获取下一组数据:由于.find()返回目标单词的索引,因此您可以继续获取下一个单词,直到遇到行尾字符,可能至少\\n

这是一个相关的问题,如果您愿意,我的帮助 也可能会有所帮助

通常,当与re匹配时(例如使用re.search(...)您将提供一个模式和一个目标字符串。 在模式中,指定要查找的字符串的结构,并在模式中使用(...) ,这将创建捕获组 ,以便以后检索。 例如:

s = "ip address 12.37.221.1 255.255.255.0"
mtch = re.search("ip address (\d+.\d+.\d+.\d+) .*")
print(mtch.group(0))
-> ip address 12.37.221.1 255.255.255.0
print(mtch.group(1))
-> 12.37.221.1

group(0)始终是完全匹配项,然后是所有捕获组。

有关更多详细信息和示例,请阅读食谱的这一部分

如果我正确理解问题,则要在"standby 1 ip"之后插入第一个IP地址。 您可以使用正则表达式捕获组来实现此目的:

data = '''
interface Vlan88
  ip address 12.37.221.1 255.255.255.0
  !
  !
  standby 1 ip'''

import re

new_data = re.sub(r'(?<=ip address )([\d.]+)(.*)(standby 1 ip)', r'\1\2\3 \1', data, flags=re.DOTALL)

print(new_data)

印刷品:

interface Vlan88
  ip address 12.37.221.1 255.255.255.0
  !
  !
  standby 1 ip 12.37.221.1

您可以在Regex101(链接)上看到此正则表达式的内部工作原理

暂无
暂无

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

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