python字符串数据处理的一些笔记(连续字符、数字字母间隔等)

目录

一、字符串处理

二、正则表达式函数说明

三、数据库遇到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,

猜你喜欢

转载自blog.csdn.net/xiaokui9/article/details/80695441