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

新手上路,请多包涵

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

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

提前致谢!

我尝试了以下方法来提取 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

原文由 SlothGR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

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

这是它应该如何工作的:

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

您可以在 此处查看 实际效果。

然后 Python 代码变为:

 import re
p = re.compile(r'(?:[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']

原文由 JoErNanO 发布,翻译遵循 CC BY-SA 4.0 许可协议

([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)

原文由 vks 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题