Python-字符串

本文详细介绍了Python中字符串的操作技巧,如引号使用、比较、切割、检索替换,以及正则表达式的基础语法、re模块的高级用法,包括匹配对象和函数,以及爬虫示例。涵盖了字符串处理和正则在实际项目中的应用。
摘要由CSDN通过智能技术生成

Python笔记目录

一、创建字符串和引号的区别

1.创建字符串时,可以使用单引号(‘’),双引号(“”),三引号(‘’'/“”")。三引号就是连续三个单引号或者双引号

str = 'hello world'
str = "hello world"
str = """hello world"""
str = '''hello world'''
print(str)#hello world

2.单引号和双引号的字符串需要写在同一行,否则需要使用续行符‘\’,三引号字符串则不需要,但是会自动换行,如果希望同一行,也可以使用续行符‘\’

str = 'hello \
world'
print(str)#hello world

str = """hello
world
"""
print(str)
#hello
#world

3.当字符串中存在字符和创建引号相同时,则需要使用转义字符" \ ",所以可以根据实际情况使用引号创建字符串,减少转义符的使用,提高代码可读性

print('I\'m fine')

4.由一对三引号创建的字符串,可以直接包括单引号和双引号,不需要使用转义符

二、字符串比较

1.字符串比较从左往右依次比较,字符相同则继续比较下一个字符,字符不相同则具有较大ASCII码的字符对应的字符串更大
2.如果字符串对应字符都相同且长度相同,则两个字符串相等
3.如果字符串对应字符都相同但长度不一致,则较长的字符串更大
4.字符串比较时可以直接使用比较运算符

str1 = '123'
str2 = '12'
print(str1>str2)#True
print(str1>=str2)#True
print(str1<str2)#False
print(str1<=str2)#False
print(str1==str2)#False
print(str1!=str2)#True

三、字符串切割

1.split方法:可以按照指定的分割符对字符串进行分割,返回由分割结果组成的列表,语法格式为:split(sep=None,maxsplit=-1),其中sep是指定的分割字符串,默认None则表示按空白符(空格,换行,制表符)进行分割,maxsplit是最大分割次数,分割结果是maxsplit+1个,默认值-1表示不限制分割次数

print('1,2,3'.split(',',1))
#['1', '2,3']

4.splitlines方法:可以按照行结束符(‘\r’,’\n‘,’\r\n‘)对字符串进行分割,返回由分割结果组成的列表,语法格式为:splitlines([keepends]),其中keepends指明分割时保留行结束符,默认False,表示分割结果列表不保留行结束符

四、字符串检索和替换

1.find:可以从左往右查找指定子串在字符串的索引,语法格式为:find(sub[,start[,end]]),其中sub是必须要提供的待查找字符串,start为查找起始索引,end为查找结束索引,不包括end。当待查找子串不存在时,返回-1

str = '12345'
print(str.find('5',0,4))
#-1

2.rfind:与find唯一区别是,从右往左找
3.index:与find唯一区别是:当待查找子串不存在时,抛出ValueError异常
4.rindex:与index唯一区别是,从右往左找
5.replace:可以将字符串中的指定子串替换为指定内容,语法格式为:replace(old,new[,max]),其中old是被替换子串,new是新子串,max指定最大替换次数,max不指定则会替换所有满足条件的子串。函数返回替换后的字符串

str = '1?2?3'
print(str.replace('?','|',1))
#1|2?3

五、去除字符串空格和大小写转换

1.strip:可以去除字符串开头和结尾的空格
2.lstrip:可以去除字符串开头的空格
3.rstrip:可以去除字符串结尾的空格
4.如果要去除所有的空格,则可以使用replace方法

str = ' hello world '
print(str.strip()+"|")
print(str.lstrip()+"|")
print(str.rstrip()+"|")
print(str.replace(' ','')+"|")
#hello world|
#hello world |
# hello world|
#helloworld|

5.capitalize:可以将字符串中第一个字母大写,其他都小写
6.lower:可以将字符串中的所有字母都小写
7.upper:可以将字符串中的所有字母都大写
8.swapccase:可以将字符串中的大小写交换,大写变小写,小写变大写

str = 'hEllo WorlD. I am moota'
print(str.capitalize())
print(str.lower())
print(str.upper())
print(str.swapcase())
#Hello world. i am moota
#hello world. i am moota
#HELLO WORLD. I AM MOOTA
#HeLLO wORLd. i AM MOOTA

六、字符串的其他常用方法

1.复制字符串:字符串是不可变类型,无法修改字符串的某个元素值,不存在修改一个字符串会影响另一个字符串的问题,因此可以通过赋值运算=即可实现复制操作
2.拼接字符串:字符串作为序列数据,可以直接使用拼接运算+,即可实现字符串的连接
3.join方法:可以使用指定的连接符连接序列元素,生成新的字符串

seq = ','
str = seq.join('12345')
print(str)
#1,2,3,4,5

4.len方法:可以计算字符串的长度

str = '12345'
print(len(str))
#5

5.in关键字:可以判断字符串是否是另一字符串的子串

str = '12345'
print('23' in str)
#True

七、占位符和format方法

1.常用的占位符有:
%d/%i:有符号整型十进制数
%o:有符号八进制数
%x:有符号十六进制数(字母小写)
%X:有符号十六进制数(字母大写)
%e:指数格式的浮点数(字母小写)
%E:指数格式的浮点数(字母大写)
%f/%F:有符号浮点型十进制书
%g:浮点数(根据数据大小自动使用%e或%f)
%G:浮点数(根据数据大小自动使用%E或%F)
%c:单个字符(整型或单个字符的字符串)
%r:字符串(使用repr函数进行对象转换)
%s:字符串(使用str函数进行对象转换)
%a:字符串(使用ascii函数进行对象转换)
%%:表示一个%
2.format方法:可以进行字符串的格式化操作,用于组装字符串,语法格式为:str.format(*args,**kwargs),其中str是待格式化的字符串,其中可以包括{}括起来的替换字段,替换字段可以是位置参数,也可以是关键字参数。该方法会返回格式化后字符串的副本,不会改变字符串原本的值

str = '{name} is a {0}'
print(str.format('dog',name = 'moota'))
#moota is a dog

3.特别的,format方法中的替换字段还可以包含对属性的访问

class Game:
    name = 'LOL'
    version = '1.0.0'
MyGame = Game()
print("{0.name} {0.version}".format(MyGame))

八、正则表达式的基础语法

1.正则表达式:也叫规则表达式,用来匹配或者说找出那样符合指定规则的字符串。
2.正则表达式中即可以既可以包含普通字符,也可以包含由特殊字符指定的匹配规则。
3.常见匹配规则:
.(点):匹配换行符以外的任一字符
^(插入符):匹配字符串开头的若干字符
$:匹配字符串结尾的若干字符
[]:匹配字符集合,匹配的字符可以是集合中的任一字符,而且可以通过‘-’指定范围,如[0-9a-zA-Z],如果加入’^‘,则表示取反,匹配非字符集合的其他字符,如[ ^ 0-9]
*:匹配前一个规则0次或者多次
+:匹配前一个规则1次或者多次
?:匹配前一个规则0次或者1次
{m}:匹配前一个规则m次
{m,n}:匹配前一个规则m至n次,省略n则表示可以最大匹配无限次
|:匹配两个规则中的任意规则
(…):匹配的规则分组,匹配完成可以获得该分组的内容
\:转义符,使后面的字符保持原本的意义
4.特殊序列规则
\number:number表示引用相应编号的分组规则,可以简化表达式
\A:匹配字符串开头的若干字符,同^
\Z:匹配字符串结尾的若干字符,同 $
\b:匹配单词边界符,用来匹配标点符号
\B:匹配非单词边界符,用来匹配单词字母
\d:匹配任一数字字符,同[0-9]
\D:匹配任一非数字字符,同[ ^ 0-9]
\s:匹配任一空白字符
\S:匹配任一非空白字符
\w:匹配包含数字和下划线在内的,任一可能出现在单词的字符
\W:匹配任一不会出现在单词的字符
4.特别的,由于Python使用’/‘作为转义符,所以如果要在字符串中使用‘\’,需要写作’\‘,因此使用特殊序列规则时,都需要重复加上’\‘,如果不想要这样,可以使用字符’r’,加在字符串前面表示忽略转义符

import re
pattern = '\w+@\w+.\w+'
str = '33347 54085@qq.com'
print(re.findall(pattern,str))
#['54085@qq.com']

九、re模块使用-compile和match

1.compile方法:可以将一个字符串形式的正则表达式,编译成一个被re模块认可的正则表达式对象,用来提供给其他match,search等函数使用,语法格式为:re.compile(pattern,flags=0),其中,pattern是字符串形式的正则表达式,flags是匹配控制信息,默认值为0,表示没有任何匹配控制信息
2.常见的匹配控制信息:
re.A或re.ASCII:使得特殊序列中的\w,\W,\b,\B,\d,\D,\s,\S仅作ASCII码的匹配,而不是Unicode码的匹配
re.DEBUG:显示被编译的正则表达式的信息
re.I或re.IGNORECASE:匹配时不区分大小写
re.L或re.LOCATE:使特殊序列中的\w,\W,\b,\B和不区分大小写的匹配取决于当前的语言环境
re.M或re.MULTILINE:使匹配规则’^‘能够匹配每行开头的若干字符,‘$’能够匹配每行结束的若干字符
re.S或re.DOTALL:使匹配规则’.'可以匹配任一字符,包括换行符
re.X或re.VERBOSE:使编译时忽略正则表达式中的空格和#后面的注释
3.match方法:可以用来从字符串开头匹配若干字符,语法格式为:re.match(pattern,string,flags=0),如果匹配成功,返回match对象,如果匹配失败,返回None

import re
print(re.match('[0-9]','a1'))
print(re.match('[0-9]','1a'))
#None
#<re.Match object; span=(0, 1), match='1'>

4.match方法:除了re模块直接调用,还可以通过compile函数生成的正则表达式对象直接调用match函数,语法格式为 pattern.match(string[,pos[,endpos]]),其中pos是匹配的起始位置,endpos是匹配的结尾位置,不包括endpos。
5.使用compile生成正则表达式对象的优点是:程序可以重复使用该对象,提高了效率

import re
pattern = re.compile(r'[0-9]')
pattern.match('a1')
pattern.match('1a')
#None
#<re.Match object; span=(0, 1), match='1'>

十、re模块使用-search

1.search方法:可以对整个字符串进行匹配并返回第一个匹配的结果,语法格式为:re.search(pattern,string,flags=0),如果匹配成功,则返回一个match对象,如果匹配失败,返回None
2.search方法和match函数不同的是,match严格的从头开始匹配,而search只需要从头开始找第一个匹配的字符序列即可

import re
print(re.search('[0-9]','a1'))
print(re.search('[0-9]','1a'))
#<re.Match object; span=(1, 2), match='1'>
#<re.Match object; span=(0, 1), match='1'>

3.同样的,可以使用compile函数生成的正则表达式调用search方法

十一、re模块使用-匹配对象

1.将match对象作为判断条件时,将永远返回True,而None永远返回False
2.常见的match对象方法
group([group1,…]):可以根据传入的组号返回对应分组的匹配结果
groups():返回所有分组匹配的字符串组成的元组
start(group=0):返回指定分组匹配结果在原字符串的起始位置,默认值0表示匹配成功的字符串在原字符串的起始位置
end(group=0):返回指定分组匹配结果在原字符串的结尾索引,默认值0表示匹配成功的字符串在原字符串的结尾位置

import re
match = re.search('([0-9])([0-9])','12345')
print(match.groups())#('1', '2')
print(match.group(0))#1
print(match.group(1))#2
print(match.start(1))#0
print(match.end(1))#1

十二、re模块使用-findall和finditer

1.findall方法:可以用来匹配所有与指定正则表达式匹配的字符串,语法格式为:re.findall(pattern,string,flags=0),如果匹配成功,返回匹配数据组成的列表,如果匹配失败,返回空列表
2.findall方法与match,search方法最大的不同就是,它可以一次匹配所有满足正则表达式的字符串
3.findliter方法:和findall方法功能完全相同,唯一区别是:findall方法返回匹配字符串组成的列表,findliter方法返回迭代器,而且迭代器元素是match对象

import re
print(re.findall('[0-9]','12345'))#['1', '2', '3', '4', '5']
it = re.finditer('[0-9]','12345')
for x in it:
    print(x)
#<re.Match object; span=(0, 1), match='1'>
#<re.Match object; span=(1, 2), match='2'>
#<re.Match object; span=(2, 3), match='3'>
#<re.Match object; span=(3, 4), match='4'>
#<re.Match object; span=(4, 5), match='5'>

十三、re模块使用-split,sub和subn

1.split方法:可以将字符串按满足正则表达式的子串分割开,语法格式为:re.split(pattern,string,maxsplit=0,flags=0),其中maxsplit是最大分割次数,默认0表示不限制分割次数

import re
str = re.split(r'\W','how old are you')
print(str)
#['how', 'old', 'are', 'you']

2.sub方法:可以将字符串中满足正则表达式的子串替换为指定的字符串,语法格式为 re.sub(pattern,repl,string,count=0,flags=0),其中repl是新替换的字符串,count是最大替换次数,默认0表示不限制替换次数

import re
str = re.sub(r'\W',' ','how?old?are?you')
print(str)
#how old are you

3.subn方法:与sub方法功能完全相同,唯一区别是:subn方法会以元组形式同时返回替换后的新字符串和替换次数

import re
str = re.subn(r'\W',' ','how?old?are?you')
print(str)
#('how old are you', 3)

十四、爬虫程序示例

1.requests模块的get函数可以从指定网页下载数据,语法格式为:get(url,params=None,**kwargs),其中url是网址,params是请求时的数据,kwargs是一些可选参数,函数会返回一个Response对象
2.可以利用re模块对获取到的html文档进行分割,获取到想要的内容,可以先通浏览器的开发者工具查看具体的文档格式,以便利用正则表达式进行匹配,下面演示了如何简单的通过re模块获取网络小说章节

import re
import requests
#获得网址内容
content = requests.get('https://www.1718k.com/files/article/html/1/1076/').text
#获得章节大概
content = re.findall(r'<a.+>[^<]+</a>',content)
for x in range(len(content)):
    content[x] = re.sub(r'<[^<]+>',' ',content[x])
#获得具体章节
chapter = []
for x in range(len(content)):
    if '章'  in content[x]:
        chapter.append(content[x])
#简单处理
dict = {0:'零',1:'一',2:'二',3:'三',4:'四',5:'五',6:'六',7:'七',8:'八',9:'九'}
for x in range(len(chapter)):
    for y in range(10):
        chapter[x] = re.sub('{0}'.format(y),dict[y],chapter[x])
print(chapter[102:108])
#[' 第九十一章 再破纪录 ', ' 第九十二章 小丑 ', ' 第九十三章 莎莉花园的夜晚 ', ' 第九十四章 鱼人夜行者 ', ' 第九十五章 斯拉克 ', ' 第九十六章 暗影之舞 ']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值