ipaddress和mac地址的正则表达式

时间:2011-03-13 04:15:37

标签: python regex ip-address mac-address

任何人都可以建议我使用ip地址和mac地址的正则表达式吗?

我正在使用python& django的

例如,

HTTP:// [IPADDRESS] /SaveData/127.0.0.1/00-0C-F1-56-98-AD/

对于mac地址,我试过以下但没有工作

([0-9A-F]{2}[:-]){5}([0-9A-F]{2})

^([0-9A-F]{2}[:-]){5}([0-9A-F]{2})$

7 个答案:

答案 0 :(得分:13)

import re
s = "http://[ipaddress]/SaveData/127.0.0.1/00-0C-F1-56-98-AD/"

re.search(r'([0-9A-F]{2}[:-]){5}([0-9A-F]{2})', s, re.I).group()
'00-0C-F1-56-98-AD'

re.search(r'((2[0-5]|1[0-9]|[0-9])?[0-9]\.){3}((2[0-5]|1[0-9]|[0-9])?[0-9])', s, re.I).group()
'127.0.0.1'

将此代码段放在django路由定义文件中 - urls.py

url(r'^SaveData/(?P<ip>((2[0-5]|1[0-9]|[0-9])?[0-9]\.){3}((2[0-5]|1[0-9]|[0-9])?[0-9]))/(?P<mac>([0-9A-F]{2}[:-]){5}([0-9A-F]{2}))', SaveDataHandler.as_view()),

答案 1 :(得分:2)

您的正则表达式只包含两个捕获组(括号),因此它不存储整个地址(第一组被“覆盖”)。试试这些:

# store each octet into its own group
r"([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})[-:]([\dA-F]{2})"
# store entire MAC address into a single group
r"([\dA-F]{2}(?:[-:][\dA-F]{2}){5})"

IP地址变得棘手,因为范围是二进制的,但表示是十进制的。

# store each octet into its own group
r"(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))\.(\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))"
# store entire IP address into a single group
r"((?:\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))(?:\.(?:\d|[1-9]\d|1\d\d|2(?:[0-4]\d|5[0-5]))){3})"

答案 2 :(得分:0)

这是用于MAC地址:

([0-9A-F]{2}[:-]){5}([0-9A-F]{2})

答案 3 :(得分:0)

您可以将/^([0-2]?\d{0,2}\.){3}([0-2]?\d{0,2})$/用于IPv4地址,将/^([\da-fA-F]{1,4}:){7}([\da-fA-F]{1,4})$/i用于IPv6地址。

您可以将这两者合并为/^((([0-2]?\d{0,2}\.){3}([0-2]?\d{0,2}))|(([\da-fA-F]{1,4}:){7}([\da-fA-F]{1,4})))$/i。您可以找到示例here

参考:http://snipplr.com/view/49994/ipv4-regex/http://snipplr.com/view/49993/ipv6-regex/

对于Mac地址您可以使用/^([0-9A-F]{2}[-:]){5}[0-9A-F]{2}$/i。您可以找到示例here

答案 4 :(得分:0)

考虑s = 256.1.1.1 我想对Michal的回答做一点修改:

def find_ip(s):
    part = '(2[0-4]|1[0-9]|[0-9])?[0-9]|25[0-5]'
    res =re.search(r'(^| )((%s)\.){3}(%s)' %(part,part), s,re.I )
    if res:
        return res.group().strip()
    else:
        return ''

通知'(^ |)'表示行开头或前方空格,以避免从'256.1.1.1'获取'56 .1.1.1'

答案 5 :(得分:0)

好吧这就是我用于IPV4的原因

([0-9] {1,3})。{3} [0-9] {1,3}

进行测试

127.0.0.1 255.255.255.255

适用于所有

答案 6 :(得分:0)

我需要进行mac地址验证,并且必须接受不带分隔符以及带有冒号和破折号分隔符的mac地址。像这样的有效格式

  • aa:bb:cc:dd:ee:ff
  • aa-bb-cc-dd-ee-ff
  • aabbccddeeff

这样的混合分隔符无效

  • aa:bb-cc-dd:ee:ff

带有正则表达式的验证码,例如

def validate_mac_address(mac_addr):
    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})$'
    return not re.match(pattern, mac_addr) is None