Python正则表达式从字符串中提取MAC地址

时间:2014-11-12 16:31:04

标签: python regex

我需要帮助编写正则表达式,使用python re引擎:

  1. 从文本文件中提取所有MAC地址
  2. 使用以下格式提取所有字符串:foo bar ... MAC:ADDRESS ... baz bat \r\n
  3. 提前致谢!

    我尝试了以下方法来提取MAC地址,但没有运气:

    import re
    p = re.compile(ur'((?:(\d{1,2}|[a-fA-F]{1,2}){2})(?::|-*)){6}')
    test_str = u"TEXT WITH SOME MAC ADDRESSES 00:24:17:b1:cc:cc TEXT CONTINUES WITH SOME MORE TEXT 20:89:86:9a:86:24"
    
    found = re.findall(p, test_str)
    for a in found:
        print a
    

4 个答案:

答案 0 :(得分:6)

我编写了以下内容:([0-9a-fA-F]:?){12}以匹配文本中的MAC地址。

以下是它的工作方式:

  • [0-9a-fA-F]匹配用于表示十六进制数字的字符
  • :?匹配可选的冒号
  • (...){12} - 然后将所有这些分组并重复12次。 12因为MAC地址由6对十六进制数组成,用冒号
  • 分隔

您可以在行动here中看到它。

然后Python代码变为:

import re
p = re.compile(ur'(?:[0-9a-fA-F]:?){12}')
test_str = u"TEXT WITH SOME MAC ADDRESSES 00:24:17:b1:cc:cc TEXT CONTINUES WITH SOME MORE TEXT 20:89:86:9a:86:24"

re.findall(p, test_str)

结果产生:

[u'00:24:17:b1:cc:cc', u'20:89:86:9a:86:24']

答案 1 :(得分:2)

([0-9a-f]{2}(?::[0-9a-f]{2}){5})

试试这个。看看演示。

http://regex101.com/r/kP8uF5/5

import re
p = re.compile(ur'([0-9a-f]{2}(?::[0-9a-f]{2}){5})', re.IGNORECASE)
test_str = u"TEXT WITH SOME MAC ADDRESSES 00:24:17:b1:cc:cc TEXT CONTINUES WITH SOME MORE TEXT 20:89:86:9a:86:24"

re.findall(p, test_str)

答案 2 :(得分:1)

我也必须匹配MAC地址,这有效:((?:[\da-fA-F]{2}[:\-]){5}[\da-fA-F]{2})

我用这个实时正则表达式测试器进行了测试:https://regex101.com/#python 每个正则表达式都做了很好的细分。

答案 3 :(得分:0)

text = "this is aa:bb:cc:dd:01:02 test for aa-bb-cc-dd-ee-ff and AABBCCDDEEFF is a mac address without separator"

让我们提取mac地址

def extract_mac_address(text):
    pattern = '(([0-9a-fA-F]{2}[:]){5}([0-9a-fA-F]{2})|([0-9a-fA-F]{2}[-]){5}([0-9a-fA-F]{2})|[0-9a-fA-F]{12})'
    mac_addr_list = re.findall(pattern, text)
    return list(map(lambda x: x[0], mac_addr_list))


print(extract_mac_address(text))

,输出为['aa:bb:cc:dd:01:02', 'aa-bb-cc-dd-ee-ff', 'AABBCCDDEEFF']