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

时间:2019-07-10 20:58:32

标签: python regex python-3.x

我正在使用路由器配置,需要编写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配置部分。但是,我还远远不知道如何搜索特定的东西并将其变成变量。

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

欢迎堆栈溢出!

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

  • 将配置文件数据加载到字符串变量中,也许是<input id="myInput" list="orderTypes" placeholder="Book"> <datalist id="orderTypes"> <option value="Book"> <option value="Copy"> <option value="Page"> </datalist> <input id="submitButton" type="submit">
  • 使用contents字符串方法搜索特定的关键字,例如.find()
  • 使用索引获取下一组数据:由于ip address返回目标单词的索引,因此您可以继续获取下一个单词,直到遇到行尾字符为止,至少可能.find()

Here is a somewhat related problem that my help if you like This may help as well

答案 2 :(得分:0)

通常,当与re匹配时(例如使用.cpp:24:9: note: 'event' is not derived from 'const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>' cout<<i<<" "; ^ ),您将提供一个模式和一个目标字符串。在模式中,指定要查找的字符串的结构,在模式中使用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 始终是完全匹配项,然后出现在您的所有捕获组中。

有关更多详细信息和示例,请阅读食谱的this section

答案 3 :(得分: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 (link).上看到此正则表达式的内部工作原理