需要正确的正则表达式来获取MAC地址和端口号

时间:2016-06-09 11:20:59

标签: python regex

我正在尝试编写一个python脚本,以从我用来监控网络的基于浏览器的软件中检索网络交换机的端口号和关联的MAC地址。

以下是我要通过正则表达式传递的源代码部分 -

            <td Class="Property"><input id =  "1933"type = "checkbox" onclick="javascript:SaveSelectedNodes();" /></td>
            <td Class="Property"><img src="/Orion/UDT/Images/Status/icon_port_active_dot.gif" title="Active port" alt="active port" style="vertical-align:bottom;" />&nbsp;&nbsp;<img src="/NetPerfMon/images/Interfaces/6.gif" title="ethernet-csmacd" alt="ethernet-csmacd" style="vertical-align:bottom;" />&nbsp;</td>
            <td Class="Property"><a href=/Orion/UDT/PortDetails.aspx?NetObject=UP:1933 @tooltip=""">Fa0/18</a></td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px">&nbsp;</td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px">&nbsp;</td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px"><div id='VendorIconDiv' border='0' class='VendorIconcss' style='vertical-align:middle; background:url(../../../../NetPerfMon/images/Vendors/1602.gif) no-repeat; padding-left:20px; height:16px; line-height:16px; font-size: 8pt !important;'></div></td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px"><a href='/Orion/UDT/EndpointDetails.aspx?NetObject=UE-MAC:VAL=F4:81:39:BA:07:91';>F4:81:39:BA:07:91</a></td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px">213</td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px">&nbsp;</td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px"><a href='/Orion/UDT/EndpointDetails.aspx?NetObject=UE-MAC:VAL=B4:A2:c1:BA:81:32';>B4:A2:c1:BA:81:32</a></td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px">213</td>
            <td Class="Property" Style="padding-left: 6px; padding-right: 6px">&nbsp;</td>

所以,我需要从这个来源获得3个值 -

1- Fa0 / 18
2- MAC地址 - F4:81:39:BA:07:91
3- MAC地址-B4:A2:c1:BA:81:32

我有所有这两个不同值的正则表达式 -

r'.+@tooltip=""">(.+)</a>' - 值为Fa0 / 18
r'.+MAC:VAL.+(\w\w:\w\w:\w\w:\w\w:\w\w:\w\w).+' - 用于mac地址

但是我无法开发一个正则表达式来将所有这些组合在一起。我需要以稍微低于格式的时间收集它们 -

Fa0/18
F4:81:39:BA:07:91
B4:A2:c1:BA:81:32

Fa0/19
<mac address-1>

FA0/20
<mac address-1>
<mac address-2>

页面源包含许多条目,正如我在示例代码中给出的那样。一个端口可以有多个MAC地址。因此,在端口收集之后也必须收集这些地址。

1 个答案:

答案 0 :(得分:0)

您没有提供足够的源代码来了解拆分文本的安全位置。但假设“工具提示”足够独特,那应该可以胜任:

import re 

def findall_macs(source):
    fragments = source.split('tooltip')
    for frag in fragments: 
        title = ""
        if re.findall('=""">(.+?)<', frag):
            title = re.findall('=""">(.+?)<', frag)[0]
        macs = set(re.findall('[a-zA-Z0-9]{2}\:[a-zA-Z0-9]{2}\:[a-zA-Z0-9]{2}\:[a-zA-Z0-9]{2}\:[a-zA-Z0-9]{2}\:[a-zA-Z0-9]{2}', frag))
        print title 
        print "\n".join(macs)


if __name__ == '__main__':
    findall_macs(source)