我需要帮助编写正则表达式,使用python re
引擎:
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
答案 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']