零基础学Python|Python基础知识学习第四天

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)

猜你喜欢

转载自blog.csdn.net/BS009/article/details/131024041