用于筛选MAC ADDRESS的正则表达式



我在为以下格式编写正则表达式时感到震惊xxxxxx g0-XXXX-XXXX-1923-785FEABCD128上面的格式是过滤MAC地址,所以我需要那些MAC地址,它有上面格式和长度中定义的字符

有可能为上述格式编写regexp吗?X个字符可以是字母数字。但其他非X字符应该是相同的。

ABCDEFG0-GHYD-SDER-1923-785FEABCD128 - Valid
ABCDEFH0-GHYD-SDER-0923-995FEABCD120 - Invalid
ABCDEFG0-GHYD-SDER-0923-995FEABCD120 - Invalid
^[a-zA-Z0-9]{6}G0-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-1923-785FEABCD128$

说明:

^匹配字符串的开头

[a-zA-Z0-9]{6}匹配任意字母数字字符6次

G0-与该文本完全匹配

[a-zA-Z0-9]{4}-任意字母数字字符4次,后跟连字符(出现两次(

1923-785FEABCD128与该文本完全匹配

$匹配字符串的末尾

import re
patt = re.compile('[A-Z0-9]{6}G0-[A-Z0-9]{4}-[A-Z0-9]{4}-1923-785FEABCD128')
for test in ['ABCDEFG0-GHYD-SDER-1923-785FEABCD128', 'ABCDEFH0-GHYD-SDER-0923-995FEABCD120', 'ABCDEFG0-GHYD-SDER-0923-995FEABCD120']:
if patt.match(test):
print(f'{test} - Valid')
else:
print(f'{test} - Invalid')

打印

ABCDEFG0-GHYD-SDER-1923-785FEABCD128 - Valid
ABCDEFH0-GHYD-SDER-0923-995FEABCD120 - Invalid
ABCDEFG0-GHYD-SDER-0923-995FEABCD120 - Invalid

为了字符串匹配而不是正则表达式,您可以使用以下解决方案:

mac_addresses = [
'ABCDEFG0-GHYD-SDER-1923-785FEABCD128',
'ABCDEFH0-GHYD-SDER-0923-995FEABCD120',
'ABCDEFG0-GHYD-SDER-0923-995FEABCD120'
]
for address in mac_addresses:
# splits 3 times, leaving the last two groups together
# for easier string matching
first, *_, last = address.split('-', 3)

if first.endswith('G0') and last == '1923-785FEABCD128':
match = 'Valid'
else:
match = 'Invalid'
print(f"{address} - {match}")

哪个打印

ABCDEFG0-GHYD-SDER-1923-785FEABCD128 - Valid
ABCDEFH0-GHYD-SDER-0923-995FEABCD120 - Invalid
ABCDEFG0-GHYD-SDER-0923-995FEABCD120 - Invalid

这里的好处是什么?如果您需要更改条件或添加新条件,则不需要修改/跟上regex

最新更新