谁能给我建议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})$
谁能给我建议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})$
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()),
您的正则表达式仅包含两个捕获组(括号),因此它不存储整个地址(第一组被“覆盖”)。试试这些:
# 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})"
您可以使用/^([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
. 你可以在这里找到一个样本。
参考: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
. 你可以在这里找到一个样本。
这是针对 MAC 地址的:
([0-9A-F]{2}[:-]){5}([0-9A-F]{2})
好的,这就是我用于 IPV4 的内容
([0-9]{1,3}。){3}[0-9]{1,3}
用
127.0.0.1 255.255.255.255
并适用于所有人
考虑 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'
我需要进行 MAC 地址验证,并且必须接受不带分隔符且带有冒号和破折号分隔符的 MAC 地址。像这样的有效格式
并且混合分隔符像这样无效
和像这样的正则表达式的验证代码。
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