1.字符串
1.1 拼接字符串
可以使用+号拼接字符串,被拼接的双方必须都是字符串,如果不是,可以使用str()来进行转换。
mystr = "i love you" mystr2 = "我爱你" mystr3 = 123 newstr = mystr+mystr2+str(mystr3)
1.2 计算字符串的长度
在python中,数字、英文、小数点、下划线和空格点一个字节。一个汉字可能占2-4个字节,汉字在GBK/GB2312编码中占2个字节,在UTF-8/Unicode中一般占3个字节(或4个字节)。
mystr = "亲爱的孩子,i love you" print(len(mystr)) #输出结果 16 ,默认中文也看作是一个字符
如果想让汉字占三个字节,可以使用encode编码后计算:
#计算字符串长度 指定编码 mystr = "亲爱的孩子,i love you" print(len(mystr.encode())) #输出结果 28 ,汉字及中文符号都被解析为3个字节
#计算字符串长度 指定编码gbk 默认的 mystr = "亲爱的孩子,i love you" print(len(mystr.encode('gbk'))) #输出结果 22,中文占2个字节
1.3 截取字符串
可以切片的方式来截取
string[start:end:step]
#字符串截取 mystr = "亲爱的孩子,i love you" print(mystr[2:5:2])
#字符串截取 mystr = "亲爱的孩子,i love you" try: newstr = mystr[30] except IndexError: print("指定的索引不存在")
1.4 分割字符串
python中使用split来进行字符串分割:
str.split(sep,maxsplit) str:进行分割的字符串 sep:指定分割符,不指定默认为空字符 maxsplit:可选参数,指定分割次数 返回值:分隔后的字符串列表
1.5 检索字符串
count():检索指定字符串在另一个字符串中出现的次数。
str.count(sub[,start[,end]]) str:表示原字符串 sub:表示要检索的子字符串 start:检索范围开始 end:检索范转结束
示例:
#字符串检索 mystr = "this is my daughter" print(mystr.count("my"))
find():检索指定字符串是否存在,如不存在返回-1,如存在返回所在位置索引
#字符串检索 mystr = "this is my daughter" print(mystr.find("my"))
index():检索指定字符串是否存在,如不存在报异常,如存在返回所在位置索引
#字符串检索 mystr = "this is my daughter" print(mystr.index("my"))
startswith():用于检索字符串是某以某个子字符串开头,是则返回True,不是则返回False
str.startswith(prefix[,start[,end]])
endswith():用于检索字符串是某以某个子字符串结尾,是则返回True,不是则返回False
str.endswith(prefix[,start[,end]])
1.6 字符串大小写转换
lower():用于将字符串中的大写转换为小写
upper():用于将字符串中的小写转换为大写
str.lower() str.upper()
1.7 去除字符串中的空格和特殊字符
strip():将字符串左右两边的空格和特殊字符去除
lstrip():将字符串左边的空格和特殊字符去除
rstrip():将字符串右边的空格和特殊字符去除
str.strip([chars]) str.lstrip([chars]) str.rstrip([chars]) #chars 为指定要去除的字符,如不指定,则默认为空格
#字符串空格和特殊字符去除 mystr = "@!this is my daughter!@" print(mystr.strip("@!"))
1.8 格式化字符串
格式化字符串是指定制定一个模板,在这个模板中预留几个空位,然后再根据需要填上相应的内容。这些空位需要通过指定的符号标记(也称为占位符),而这些符号还不会显示出来。在Python中,格式化字符串有以下两种方法。
1.8.1 使用%操作符
'%[-][+][0][m][.n]格式化字符'%exp
参数说明:
-:可选参数,用于指定左对齐,正数前方无符号,负数前面加负号 +:可选参数,用于指定右对齐,正数前方加正号,负数前面加负号 0:可选参数,表示右对齐,正数前方无符号,负数前方加负号,用0填充空白处(一般与m参数一起使用) m:可选参数,表示占有宽度 .n:可选参数,表示小数点后保留的位数 格式化字符:用于指定类型,其值如下图所示 exp:要转换的项。如果要指定的项有多个,可以使用元组表示,但不能使用列表。
2.正则表达式
正则表达式是用于查找符合某些规则的字符串的一种工具。
2.1 行定位符
行定位符就是描述子串的边界。^表示行的开始,$表示行的结尾。
^tm:表示查找以tm开头的字符串 tm$:表示查找以tm结尾的字符串 tm:匹配字符串中任意位置的tm串
2.2 元字符
常用元字符如下图所示:
2.3 限定字符
限定字符是用来配合元字符一起使用,限定某些字符或数字出现的次数的字符。常用限定符如下图所示:
2.4 字符类
如果要查找没有预定义的字符集合,使用[ ]来列出想要匹配的任意字符即可,比如想匹配,a,e,i,o,u 则只需要在中括号列出即可,[a,e,i,o,u]即可实现对这五个字符的匹配操作。[0-9]表示匹配0-9中的任意数字,作用和\d相同,[a-z0-9A-Z_]则和\w作用一样。如果想匹配任意一个汉字,可以使用 [\u4e00-\u9fa5] ,如果想连续匹配多个汉字,可以使用 [\u4e00-\u9fa5]+ 来表示。
2.5 排除字符
^作为排除字符使用,比如[ ^a-zA-Z] 表示匹配的不是一个字母字符。
2.6 选择字符
如果规则中包含选择性的条件判断逻辑,可以使用|符号来进行或的处理。
(^\d{15}$)|(^\d(18)$)|(^\d(17)$)(\d|X|x)$
该示例中是用来匹配身份证的,表示匹配15位数或18位数字,或前面17位数字和最后一位,最后一位可以是数字,也可以是大写X和小写x.
2.7 转义字符
用于将一个字符在表达式中变成普通字符,以免发生岐义,比如元字符 . 在表达式中表示匹配任意字符,而我们如果就是想匹配 . 就需要使用转义字符 \ 来进行处理。
[1-9]{1,3}\.[1-9]{1,3}\.[1-9]{1,3}\.[1-9]{1,3} #表示匹配IP地址,如 127.0.0.1
2.8 分组
小括号的作用有两个,一个是改变限定符的作用范围。如(six|four)th 表示匹配sixth和fourth,如果不加小括号就表示匹配six或fourth了。
小括号的第二个作用就是分组,也就是所谓的子表达式。比如:(\.[0-9]{1,3}){3},就是对(\.[0-9]{1,3})进行重复3次的操作。
2.9 Python中使用正则表达式
正则表达式是一种规则,很多语言中都可以使用。Python在使用正则表达式时,是把它当做一个模板字符串来使用的。在使用时,可以在模板字符串前加r 或R来表示当前模板字符串是原生字符串。
r'\bm\w*\b'
Python中提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法(search()、 macth()、findall()等)进行字符串处理,也可以先使用re模块的compile()方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串。re模块在使用时,需要先应用import语句引入,具体的代码如下:
import re
2.9.1 匹配字符串
使用match()方法匹配字符串:
match()方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None,语法格式如下:
re.match(pattern,string,[flags])
pattern: 表示模式字符串,由要匹配的正则表达式转换而来。 string: 表示要匹配的字符串。 flags: 可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如下:
示例:匹配字符串是否以"mr_"开头,不区分字母大小写:
import re pattern = r'mr_\w+' #模式字符串 string = 'MR_SHOP mr_shop' #要匹配的字符串 match = re.match(pattern,string,re.I) #匹配字符串,不区分大小写 print(match) #输出匹配结果 string = '项目名称MR_SHOP mr_shop' match = re.match(pattern,string,re.I) #匹配字符串,不区分大小写 print(match)
打印输出的Match对象,提供了一些方法用于获得匹配值的位置和匹配数据。
start():获取匹配值的起始位置
end():获取匹配值的结束位置
span():获得匹配位置的元组
string属性:获得要匹配的字符串
示例:
import re pattern = r'mr_\w+' #模式字符串 string = 'MR_SHOP mr_shop' #要匹配的字符串 match = re.match(pattern,string,re.I) #匹配字符串,不区分大小写 print('匹配值的起始位置:'+match.start()) print('匹配值的结束位置:'+match.end()) print('匹配位置的元组:'+match.span()) print('要匹配的字符串:'+match.string) print('匹配数据:'+match.group())
使用search()方法匹配字符串:
search()方法用于从字符串中搜索第一个匹配的值,如果在起始位置匹配成功,则返回Match对象,否则返回None,语法格式如下:
re.search(pattern,string,[flags])
pattern: 表示模式字符串,由要匹配的正则表达式转换而来。 string: 表示要匹配的字符串。 flags: 可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如上图所示,同match方法。
示例:匹配字符串是否以"mr_"开头,不区分字母大小写:
import re pattern = r'mr_\w+' #模式字符串 string = 'MR_SHOP mr_shop' #要匹配的字符串 match = re.search(pattern,string,re.I) #匹配字符串,不区分大小写 print(match) #输出匹配结果 string = '项目名称MR_SHOP mr_shop' match = re.search(pattern,string,re.I) #匹配字符串,不区分大小写 print(match)
使用findall()方法匹配字符串:
findall()方法用于从字符串中搜索所有匹配的值,并以列表形式返回,如果匹配成功,则返回成功则匹配包含匹配结构的列表。否则返回空列表,语法格式如下:
re.findall(pattern,string,[flags])
pattern: 表示模式字符串,由要匹配的正则表达式转换而来。 string: 表示要匹配的字符串。 flags: 可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如上图所示,同match方法。
import re pattern = r'mr_\w+' #模式字符串 string = 'MR_SHOP mr_shop' #要匹配的字符串 match = re.findall(pattern,string,re.I) #匹配字符串,不区分大小写 print(match) #输出匹配结果 string = '项目名称MR_SHOP mr_shop' match = re.findall(pattern,string,re.I) #匹配字符串,不区分大小写 print(match)
在使用时,如果指定的模式字符串中,包含分组,则返回与分组匹配的文本列表。
import re pattern =r'[1-9]{1,3}(\.[0-9]{1,3}){3}' #模式字符串 str1 = '127.0.0.1 192.168.2.6' #要匹配的字符串 match = re.findall(pattern,str1) #进行模式匹配 print(match)
结果输出:
['.1', '.6']
原因就是模式字符串是出现了分组,根据分组 (.[0-9]{1,3}) 来进行匹配。如果想获取整个模式字符串的匹配,可以将整个模式字符串使用一对小括号进行分组,然后在获取结果时,只取返回值列表的每个元素的第一个元素。
示例:
import re pattern =r'([1-9]{1,3}(\.[0-9]{1,3}){3})' #模式字符串 str1 = '127.0.0.1 192.168.2.6' #要匹配的字符串 match = re.findall(pattern,str1) #进行模式匹配 会得到符合两个分组表达式的列表 print(match) for item in match: print(item[0])
2.9.2 替换字符串
sub()方法用于实现字符串替换:
re.sub(pattern,repl,string,count,flags)
参数说明:
* pattern: 表示模式字符串,由要匹配的正则表达式转换而来。 * repl: 表示要替换的字符串。 * string: 表示要替换的原始字符串。 * count: 表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配。 * flags: 可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。常用的标志如上图所示,同match方法。
示例:阿尔隐藏中奖信息后的手机号码
import re pattern = r'1[34578]\d{9}' #定义要替换的模式字符串 string = '中奖号码为:84978981 联系电话为:13611111111' result = re.sub(pattern,'1xxxxxxxxxx',string) #替换字符串 print(result)
2.9.3 分割字符串
split()方法用于实现根据正则表达式分割字符串,并以列表的形式返回,其作用与字符串对象的split()方法类似,所不同的就是分割字符由模式字符串指定。语法如下:
re.split(pattern,string,[maxsplit],[flags])
参数说明:
* pattern: 表示模式字符串,由要匹配的正则表达式转换而来 * string :表示要匹配的字符串. * maxsplit: 可选参数,表示最大的拆分次数。 * flags: 可选参数:表示标志位,用于控制匹配方式,如是否区分字母大小写。
示例:
import re pattern = r'[?|&]' #定义分割符 url = 'http://www.znzn.com/login.jsp?username="mr"&pwd="mrsoft"' result = re.split(pattern,url) #分割字符串 print(result)