[英]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.