题目一:
小程序开发定制判断一个字符串是否符合ipv4地址,返回true或者false比如:输入“127.0.0.1”,返回true 输入"256.1.2.3",返回false
1、题目分析:
IPv4地址由4小程序开发定制个十进制数和3个点组成,小程序开发定制每个十进制数范围为0-255。比如,127.0.0.1。
⚠️注意:小程序开发定制内的数不会以0开头。比如,地址127.10.111.01 是不合法的。
2、代码实现:
- import re
- def is_ipv4(str):
- pattern = "([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])(\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])){3}$"
- result = re.match(pattern, str)
- if result:
- return "true"
- else:
- return "false"
-
- print('127.0.0.1 :', is_ipv4('127.0.0.1'))
- print('256.1.2.3 :', is_ipv4('256.1.2.3'))
- print('127.0.0.01 :', is_ipv4('127.0.0.01'))
3、代码解析:
pattern = "([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])(\.([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])){3}$"
分段匹配0-255的整数:
模式 | \d | [1-9]\d | [1-9]?\d | 1\d{2} | 2[0-4]\d | 25[0-5] |
---|---|---|---|---|---|---|
匹配字符串 | 0-9 | 10-99 | 0-99 | 100-199 | 200-249 | 250-255 |
本文涉及到的Python正则表达式模式如下表所示:
模式 | 功能描述 |
---|---|
$ | 匹配字符串的末尾 |
[...] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a’, ‘m’ 或 ‘k’ |
\d | 匹配任意数字,等价于 [0-9] |
\. | 匹配 ‘.’ |
(re) | 对正则表达式分组并记住匹配的文本 |
a|b | 匹配a或b |
{m, n} | 匹配m到n次由前面的正则表达式定义的片段,贪婪方式 "ab{3,5}":表示一个字符串有一个a跟着3到5个b。 |
{n} | 精确匹配n个表达式。 例如,o{2} 不能匹配 ‘Bob’ 中的 ‘o’,但是能匹配 ‘food’ 中的 ‘oo’ |
* | 匹配0次或无限次。 "ab*":表示一个字符串有1个a后面跟着0个或若干个b。("a", "ab", "abbb",……) |
+ | 匹配1次或无限次。 "ab+":表示一个字符串有1个a后面跟着至少1个b。("ab", "abb","abbb",……) |
? | 匹配0次或1次。 "ab?":表示一个字符串有1个a后面跟着0个或者1个b。("a", "ab") |
re.match函数正则表达式-英文regular expression,缩写为 re 。函数语法:re.match(pattern, string)函数参数说明:pattern表示正则表达式模式,string表示要匹配的字符串。re.match从字符串的起始位置开始与模式进行匹配,若匹配成功,则返回一个匹配对象,若匹配失败,则返回None。
题目二:
编写一个函数来验证输入的字符串是否是有效的IPv4或IPv6地址。
1、题目分析:
IPv6地址由8组16进制数和7个(":")组成,每组表示16比特。
比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334是一个有效的地址。
⚠️注意:字符串里没有空格或者其他特殊字符,每组16进制数为4位。
2、代码实现:
- import re
-
- def validIPAddress(IP):
- pattern_IPv4 = "([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])(\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])){3}$"
- pattern_IPv6 = '([\dA-Fa-f]{1,4}\:){7}[\dA-Fa-f]{1,4}$'
- if re.match(pattern_IPv4, IP):
- return 'IPv4'
- if re.match(pattern_IPv6, IP):
- return 'IPv6'
- return 'Neither'
-
- print(validIPAddress('172.16.254.1'))
- print(validIPAddress('256.256.256.256'))
- print(validIPAddress('1.1.1.01'))
- print(validIPAddress('2001:0db8:85a3:0:0:8A2E:0370:7334'))
- print(validIPAddress('2001:0db8:85a3:0:0:8A2E:0370:73340'))
- print(validIPAddress('2001:0db8::0:0:8A2E:0370:7334'))
3、代码解析:
pattern_IPv6 = '([\dA-Fa-f]{1,4}\:){7}[\dA-Fa-f]{1,4}$'
每一位十六进制数:
模式 | [\dA-Fa-f] |
---|---|
匹配字符串(不区分大小写) | 0 1 2 3 4 5 6 7 8 9 a b c d e f 0 1 2 3 4 5 6 7 8 9 A B C D E F |