【问题标题】:Regular Expression to filter MAC ADDRESS过滤 MAC 地址的正则表达式
【发布时间】:2022-01-13 14:43:23
【问题描述】:

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

是否可以为上述格式编写正则表达式? X 字符可以是 字母数字。但其他非 X 字符应相同。

ABCDEFG0-GHYD-SDER-1923-785FEABCD128 - Valid

ABCDEFH0-GHYD-SDER-0923-995FEABCD120 - Invalid

ABCDEFG0-GHYD-SDER-0923-995FEABCD120 - Invalid

【问题讨论】:

  • 为什么是正则表达式?为什么不if address.endswith('1923-785FEABCD128')
  • @C.Nivs,里面也有一个G0。但你的观点很好:字符串匹配可能比这里的正则表达式更合适。

标签: javascript python regex


【解决方案1】:

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

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

这里的好处?如果您需要更改条件或添加新条件,则无需修改/跟上正则表达式

【讨论】:

    【解决方案2】:
    ^[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 与该文本完全匹配

    $ 匹配字符串的结尾

    【讨论】:

      【解决方案3】:
      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
      

      【讨论】:

      • heh 与@devjoco 的答案几乎相同,除了一个允许小写字母
      猜你喜欢
      • 1970-01-01
      • 2011-07-14
      • 2022-10-04
      • 2012-01-25
      • 2016-12-15
      • 2011-05-14
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      相关资源
      最近更新 更多