{1{我想得到的是一个简单的列表,但我现在可以得到一个简单的列表。脚本下面的示例输出。注意到“VLAN”中的“V”是如何作为自己的项捕获到这个中的?在
我也在想,是否有更好的方法来实现这一点,也许我可以包括一个库来处理将表格数据转换成字典之类的。在
#!/usr/bin/python
import re
import sys
data = """
VLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Fa0/2, Fa0/3, Fa0/4, Fa0/5, Fa0/6, Fa0/7
Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12
Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17
Fa0/18, Fa0/19, Fa0/20, Fa0/21, Fa0/22
Fa0/23, Fa0/24, Gi0/2
1002 fddi-default act/unsup
1003 token-ring-default act/unsup
1004 fddinet-default act/unsup
1005 trnet-default act/unsup
"""
lines = re.split("\n([^\s])", data)
print lines
输出:
['', 'V', 'LAN Name Status Ports', '-', '--- -------------------------------- --------- -------------------------------', '1', ' default active Fa0/2, Fa0/3, Fa0/4, Fa0/5, Fa0/6, Fa0/7\n
Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12\n
Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17\n
Fa0/18, Fa0/19, Fa0/20, Fa0/21, Fa0/22\n
Fa0/23, Fa0/24, Gi0/2', '1', '002 fddi-default
act/unsup', '1', '003 token-ring-default act/unsup', '1', '004 fddinet-default act/unsup', '1', '005 trnet-default act/unsup\n']
谢谢!在
编辑:(很抱歉,这不起作用),但这整件事还是让人觉得很不好,所以我很乐意听听其他的建议。在lines = re.findall(".*[^\n\W]*", data)
似乎这是一个更好的方法
这些天我建议查看一个专用的现有库来进行解析。我发现的一个这样的示例库是ciscoconfparse,它将把一个IOS配置(和其他一些配置)解析为line对象,这些对象维护了对配置操作有用的子/父行关系。在
这可能不是最好的办法,但至少是一个解决办法。使用regex模块而不是re模块。在
与内置的re模块不同,regex模块允许在零宽度匹配时进行拆分,因此可以使用lookahead在下一个字符匹配的位置进行拆分。在
参考文献:
Python re.split and attaching matched group to either right or left side of the split
https://pypi.python.org/pypi/regex
NTC Templates提供一组模板来解析各种Cisco IOS命令输出(和其他网络设备)。模板与TextFSM一起工作来进行实际的解析。在
例如:
相关问题 更多 >
编程相关推荐