目录
一、字符串处理
二、正则表达式函数说明
三、数据库遇到float数据类型存储的问题
四、参考帖子
一、字符串处理
1、判断字符串是否全部为数字:isdigit()
2、正则表达式判断字符串是否为ip地址:
pattern = r'^((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))$'
result = re.match(pattern, domain)
3、正则表达式判断字符串是否为域名:
pattern = r'^(?=^.{3,255}$)[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+$'
result = re.match(pattern, domain)
DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符,也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的域名写在最右边。由多个标号组成的完整域名总共不超过255个字符。
4、获取连续字符个数
使用正则表达式将字符串进行分片,分片依据为是否是连续字符,然后再对分片的长度进行统计。
#第一种解法
sep = '|'
separated_s = re.sub(r'(.)\1*', lambda m: m.group(0)+sep, str1)#lambda作为一个表达式,定义了一个匿名函数,代码m为入口参数,m.group(0)+sep为函数体,即返回值。在这里lambda简化了函数定义的书写形式。
for node in separated_s.split(sep)[:-1]: len_node = len(node)
if len_node>1:
count+=len_node
#第二种解法
it = re.finditer(r'(.)\1*', str1)for node in it:
len_node = len(node.group())#注意这里的.group()
if len_node>1:
count+=len_node
5、计算连续辅音字母个数
使用正则表达式将字符串进行分片,分片依据为是否是连续辅音字符,然后再对分片的长度进行统计。
it = re.finditer(r'([bcdfghjklmnpqrstvwxyz])*', str1)
for node in it:#print node.group()
len_node = len(node.group())
if len_node>1:
count+=len_node
6、是否存在字母间数字
使用正则表达式进行匹配
result = re.search(r'[a-z][0-9][a-z]', str1)
7、字符串包含特定字符的个数
pattern = re.compile(r'-')
result = pattern.findall(str1)
return len(result)
二、正则表达式函数说明
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
re.sub
用于替换字符串中的匹配项。
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
re.finditer
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
re.finditer(pattern, string, flags=0)
参数:
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 要匹配的字符串。 |
flags | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志 |
findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
语法格式为:
findall(string[, pos[, endpos]])
参数:
- string : 待匹配的字符串。
- pos : 可选参数,指定字符串的起始位置,默认为 0。
- endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。
三、另外,数据库存储时遇到float数据类型存储到数据库里被四舍五入成整数了
查了一下,调整了两个内容:
(1)将mysql数据类型从float更改为decimal,因为看网上说“和float类型相比,numeric和decimal存储的是精确值”,float存储的值在很多位小数的位置可能不准确。
(2)修改数据库中存储的小数位的位数(搜了N久怎么改,最后发现就在设计表里有这样一个字段(ˉ▽ˉ;)泪奔)。
四、参考帖子:
1、正则表达式可参考网址:http://www.runoob.com/python/python-reg-expressions.html
2、域名和IP的正则表达式可参考:https://blog.csdn.net/xueluo0000/article/details/46048247
3、数据库中慎用float数据类型:详见https://www.2cto.com/database/201301/183240.html,