代码
import unittest
from ddt import data, unpack, ddt
import re
class IP:
def isIpVsAddrLegal(self,ipStr):
if '.' not in ipStr:
return False
ip_split_list = ipStr.strip().split('.')
if len(ip_split_list) != 4:
return False
for i in range(4):
try:
ip_split_list[i] = int(ip_split_list[i])
except:
print('IP invalid for not number:' + ipStr)
exit()
if 255 >= ip_split_list[i] >= 0:
pass
else:
print('IP invalid:' + ipStr)
return False
if int(ip_split_list[0] == 0):
print('IP format wrong')
exit()
return True
def check_ip(self,ipAddr):
compile_ip = re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
if compile_ip.match(ipAddr):
return True
else:
return False
@ddt
class TestIp(unittest.TestCase):
'''
#@unpack
def test_IP_Legal(self,ip_list):
ip = IP()
print(ip.isIpVsAddrLegal(ip_list))
'''
@data(
['11.31.137.251'],['.'],['aa.11.23']
)
@unpack
def test_IP_Legal(self,ip_list):
ip = IP()
print(ip.check_ip(ip_list))
if __name__ == '__main__':
unittest.main()
代码中用到的函数和用法分析
strip()
用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
str.strip([chars]); #chars 移除字符串头尾指定的字符序列
split()
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
str.split(str=“”, num=string.count(str)). str 分隔符 num 分割次数
import re
re模块称为正则表达式
预定义字符:
\d 匹配所有的十进制数字 0-9 \D 匹配所有的非数字,包含下划线 \s 匹配所有空白字符(空格、TAB等) \S 匹配所有非空白字符,包含下划线 \w 匹配所有字母、汉字、数字 a-z A-Z 0-9 \W 匹配所有非字母、汉字、数字,包含下划线
特殊字符
1、$:匹配一行的结尾(必须放在正则表达式最后面)
2、^:匹配一行的开头(必须放在正则表达式最前面)
3、*:前面的字符可以出现0次或多次(0~无限)
4、+:前面的字符可以出现1次或多次(1~无限)
5、?:变"贪婪模式"为"勉强模式",前面的字符可以出现0次或1次
6、.:匹配除了换行符"\n"之外的任意单个字符
7、|:两项都进行匹配
8、[ ]:代表一个集合,有如下三种情况 [abc]:能匹配其中的单个字符 [a-z0-9]:能匹配指定范围的字符,可取反(在最前面加入^) [2-9] [1-3]:能够做组合匹配 9、{ }:用于标记前面的字符出现的频率,有如下情况:
{n,m}:代表前面字符最少出现n次,最多出现m次 {n,}:代表前面字符最少出现n次,最多不受限制 {,m}:代表前面字符最多出现n次,最少不受限制 {n}:前面的字符必须出现n次
匹配方法
1、match:在目标文本的开头进行匹配
find = re.math('hello', str1)
2、search:在整个目标文本中进行匹配
3、findall:扫描整个目标文本,返回所有与规则匹配的子串组成的列表,如果没有匹配的返回空列表
4、finditer:扫描整个目标文本,返回所有与规则匹配的子串组成的迭代器
5、fullmatch:要求目标文本要完全匹配规则,否则返回None
6、sub:将与规则匹配的子串替换为其他文本
str1 = re.sub('\w+', 'aaa', str, count=0)
7、split:从与规则匹配的子串进行切割,返回切割后子串组成的列表
参考文章 https://www.jb51.net/article/223741.htm https://zhuanlan.zhihu.com/p/344932104
|