六、字符串以及正则表达式
字符串的常用方法
常用操作(字符串是python中的不可变数据类型)
str.lower():将str字符串全部转成小写字母,结果为一个新的字符串
str.upper():将str字符串全部转成大写字母,结果为一个新的字符串
str.split(sep=None):把str按照指定的分隔符sep进行分隔,结果为列表类型
str.count(sub):结果为sub这个字符串在str中出现的次数
str.find(sub):查询sub这个字符串在str中是否存在,如果不存在结果为-1,如果存在,结果为sub首次出现的索引
str.index(sub):功能与find()相同,区别在于要查询的子串sub不存在时,程序报错
str.strip():去掉字符串左右两侧的空格
str.lstrip():去除字符串左侧的空格
str.rstrip():去除字符串右侧的空格
格式化字符串的三种方式
占位符:
%s:字符串格式化;%d:十进制整数格式;%f:浮点数格式
name='张三'
age=18
score=98.5
print('姓名:%s,年龄:%d,成绩:%f'%(name,age,score))
f-string:
python3.6引入的格式化字符串的方式,以{}标明被替换的字符
name='张三'
age=18
score=98.5
print(f'姓名:{name},年龄:{age},成绩:{score}')
str.format()方法:
模板字符串.format(逗号分隔的参数)
name='张三'
age=18
score=98.5
print('姓名:{0},年龄{1},成绩{2}'.format(name,age,score))
字符串的编码和解码:
字符串的编码:将str类型转换成bytes类型,需要用到字符串的encode()方法,语法格式为:
str.encode(encoding='utf-8',errors='strict/ignore/replace')
s='伟大的中国梦'
#编码str->bytes
sencode=s.encode(errors='replace')
print(sencode)
字符串的解码:将bytes类型转换成str类型,需用到bytes类型的decode()方法,语法格式为:
bytes.decode(encoding='utf-8',errors='strict/ignore/replace')
s='伟大的中国梦'
#编码str->bytes
sencode=s.encode(errors='replace')
print(sencode)
#解码过程
print(bytes.decode(sencode,'utf-8'))
字符串的拼接操作
字符串拼接的方式有:
1.使用str.join()方法进行拼接字符串
s1='hello'
s2='world'
print(''.join([s1,s2]))#使用空字符串进行拼接
print('*'.join(['hello','world','python','java']))#使用*拼接
2.直接拼接
#直接拼接
print('hello''world')
3.使用格式化字符串进行拼接
s1='hello'
s2='world'
print('%s%s'%(s1,s2))
print(f'{s1}{s2}')
print('{0}{1}'.format(s1,s2))
正则表达式
正则表达式,通常缩写为regex或regexp,是一种强大的文本匹配和处理工具。在python中,re模块提供了对正则表达式的支持,可以使用这个模块执行各种字符串的操作,如搜索、替换、匹配等。
以下是一些基本的正则表达式概念和用法的简要解释:
1.普通字符:正则表达式可以包含普通字符,他们会直接匹配自身。例如,正则表达式‘abc’会匹配字符串中的‘abc’。
2.转义字符:使用反斜杠‘\'可以取消元字符的特殊含义,使其匹配字面值。例如’\.'匹配实际的句点字符。
3.预定义字符集:一些预定义的字符集有特殊的表示,例如:
\d
:匹配任何数字。\D
:匹配任何非数字字符。\w
:匹配任何字母数字字符。\W
:匹配任何非字母数字字符。\s
:匹配任何空白字符。\S
:匹配任何非空白字符。
在python中使用re模块,需要导入模块并使用其函数。以下是一个简单示例:
import re
# 定义正则表达式
pattern = re.compile(r'\d+')
# 在字符串中搜索匹配
result = pattern.search("There are 123 apples.")
if result:
print("Match found:", result.group())
else:
print("No match")
# 替换字符串中的匹配
new_string = pattern.sub("X", "There are 123 apples.")
print("After replacement:", new_string)
re模块的使用
re.match(pattern,string,flags=0):用于从字符串的开始位置进行匹配,如果起始位置匹配成功,结果为Match对象,否则结果为None。
import re
pattern='\d\.\d+'#+限定符,\d:0-9的数字出现一次或多次
s='I study Python 3.9 every day'#待匹配字符
match=re.match(pattern,s,re.I)
print(match)
re.search(pattern,string,flags=0):用于在整个字符串中搜索第一个匹配的值,如果匹配成功,结果为Match对象,否则结果为None。
import re
pattern='\d\.\d+'#+限定符,\d:0-9的数字出现一次或多次
s='I study Python 3.9 every day Python2.7 I love you'#待匹配字符
match=re.search(pattern,s)
print(match)
re.findall(pattern,string,flags=0):用于在整个字符串搜索所有符合正则表达式的值,结果为一个列表类型。
import re
pattern='\d\.\d+'#+限定符,\d:0-9的数字出现一次或多次
s='I study Python 3.9 every day Python2.7 I love you'#待匹配字符
match=re.findall(pattern,s)
print(match)
re.sub(pattern,string,flags=0):用于实现对字符串由指定字串的替换。
import re
pattern='黑客|破解|反爬'
s='我想学习Python,想破解一些VIP视频,Python可以实现无底线反爬吗?'
new_s=re.sub(pattern,'xxx',s)
print(new_s)
re.split(pattern,string,flags=0):字符串中的split()方法功能相同,都是分割字符串。