Python新手求大佬指导:如何构建Python编程思路?
有以下文本,大多数情况下都是第一段文本,偶尔会有第二段,相比第一个多了一个ip address x.x.x.x x.x.x.x
4500#sh run int vlan 3
Building configuration...
Current configuration : 122 bytes
!
interface Vlan3
ip address 192.168.234.17 255.255.255.240
no ip redirects
no ip proxy-arp
end
4500#sh run int vlan 4
Building configuration...
Current configuration : 192 bytes
!
interface Vlan4
ip address 192.168.23.65 255.255.255.192 secondary
ip address 192.168.4.1 255.255.255.0
ip access-group 100 in
no ip redirects
no ip unreachables
no ip proxy-arp
end
我用这段正则来匹配:
vlan_info = vlan_output.encode('ascii','ignore')
vlan_info_re = re.search(r"(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b) (\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)",vlan_info)
gateway = vlan_info_re.group(1)
netmask = vlan_info_re.group(2)
如果仅是第一段文本的话是可以正常匹配的,但如果第二段也存在的话就只会匹配到第一个。 求大佬指导个 python 的思路,怎么把文本里面的 ip 和掩码全取出来,应该怎么写才比较 pythonic? 谢谢!
Python新手求大佬指导:如何构建Python编程思路?
re.findall(r"\d+.\d+.\d+.\d+", vlan_info)
正确的思路是找一个库
我是想分别取得网段的值,所以没有用 findall
一时半会儿没想到应该怎么写了
前来求助
多查手册,re.search 只会返回第一个 Match
这个我知道是只会返回第一个 Match
我想的是毕竟第二段这种情况较少,难道也只能单独再写一个来匹配吗?
或者说有什么其他的 pythonic 的方法来实现呢?
网络设备的这种配置,其实不适合用这种方法来解析
应该怎么弄呢?麻烦有空指导下了,多谢。
你这个需求不需要用正则的python<br>import sys<br><br><br>def main(fp):<br> print('ip\tmask')<br> with open(fp, 'r') as fh:<br> for line in fh:<br> line_trim = line.strip()<br> if line_trim.startswith('ip address'):<br> lst = line_trim.split()<br> ip, mask = lst[2], lst[3]<br> print('{}\t{}'.format(ip, mask))<br><br><br>if __name__ == '__main__':<br> if len(sys.argv) != 2:<br> print("usage: {} <ip_file>".format(sys.argv[0]))<br> sys.exit(1)<br> main(sys.argv[1])<br><br>
我去, v2 的回复真是无力吐槽, 代码见 gist: https://gist.github.com/ferstar/fb9156300827f6eb18aa5e219970cfec
cat file |grep ‘ip address’|awk -F ’ ’ '{print $3" "$4}'
一句 shell 能解决的问题,非要写 python
[dog]我这个又并不是解决单个问题,我这个是在 python 下面的一段问题而已。。。。


