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

ar7v8xwq  于 2022-11-18  发布在  Python
关注(0)|答案(7)|浏览(207)

我 需要 帮助 来 编写 正则 表达式 , 使用 python re 引擎 来 :
1.从 文本 文件 中 提取 所有 MAC 地址
1.使用 以下 格式 提取 所有 字符 串 :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

中 的 每 一 个

y1aodyip

y1aodyip1#

我编造了以下内容:([0-9a-fA-F]:?){12}以匹配文本中的MAC地址。
下面是它的工作原理:

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

您可以在here的操作中看到它。
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']
oknrviil

oknrviil2#

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

u4dcyp6a3#

我还必须匹配MAC地址,这是有效的:((?:[\da-fA-F]{2}[:\-]){5}[\da-fA-F]{2})
我用这个regex测试器测试了它:https://regex101.com/#python它对每个正则表达式做了很好的分类。

w1e3prcc

w1e3prcc4#

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']

cotxawn7

cotxawn75#

单个MAC地址的最佳正则表达式匹配,且结尾不溢出:

import re

regex = r"^((([a-f0-9]{2}:){5})|(([a-f0-9]{2}-){5}))[a-f0-9]{2}$"

test_str = "89:89:89:89:89:89"

subst = ""

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 1, re.IGNORECASE)

if result:
    print (result)

参考:https://regexpattern.com/mac-address/

xmq68pz9

xmq68pz96#

import re
print(re.search("([a-f0-9A-F]{4}[.]){2}[a-f0-9A-F]{4}", "0000.aaaa.bbbb").group())

[a-f0-9A-F]{4} -> matches for four occurrences of a-f or 0-9, A-F 

here it will search only for one mac in a string.if you want to search for more than one occurance we need to use re.findall.
3zwtqj6y

3zwtqj6y7#

从任何输入中查找有效MAC地址的最佳方法是:
r'([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})[\s]'

相关问题