python字符串截取、查找、替换、分割

python字符串讲解目录:

Python 截取字符串使用 变量[头下标:尾下标:步长],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

Python 截取字符串

注意事项:

截取字符串时从头下标开始 到 尾下标 结束,包含头下标开始位置,但不包含尾下标结束位置,也就是去掉尾下标结束位置的这个字符。

下面准备的数据,将要测试 截取字符串,第一行代表的是字符串,第二行代表的是步长为正数的索引,第三行代表的是步长为负数的索引

字符串 0 1 2 3 4 5 6 7 8
步长为正数的索引 0 1 2 3 4 5 6 7 8
步长为负数的索引 -9 -8 -7 -6 -5 -4 -3 -2 -1

字符串截取,当步长为正数的情况

# 序列名[开始位置的下标:结束位置的下标:步长]
str1 = '012345678'
print(str1[2:5:1])  # 234
print(str1[2:5:2])  # 24
print(str1[2:5])  # 234
print(str1[:5])  # 01234  如果不写开始,默认从0开始选取
print(str1[2:])  # 2345678 如果不写结束,表示选取到最后
print(str1[:])  # 2345678 如果都开始和结束都不写,表示选取所有

字符串截取,当步长为负数的情况

# 字符串截取,当步长为负数的情况,负数测试
# 当步长为负数时代表的是,字符串截取是从右向左截取的,是有方向的
print(str1[::-1])  # 876543210 --如果步长为负数,表示倒叙选取
print(str1[-4:-1])  # 567 --下标-1表示最后一个数据,依次向前类推

# 字符串截取容易出错的地方
# 字符串不能截取数据的情况
# 终极测试
print('----------')
print(str1[-4:-1:-1])
'''不能选取出数据:从-4开始到-1结束,选取方向为从左到右,但是-1步长:从右向左选取
如果选取方向(下标开始到结束的方向)和步长的方向冲突,则无法选取数据
'''
print(str1[-1:-4:-1])  # 876
'''字符串能截取出数据:从-1开始到-4结束,选取方向为从右到左,当步长为-1时:从右向左选取
方向和步长的方向不冲突,所以能选取数据
'''

注意:在Python中字符串的截取也叫字符串的切片

字符串查找 find

# 1. find()
mystr='hello world and xinbiancheng.cn and baidu.com and google.cn'
# 第一个and 在12索引位置, 第二个and 在索引位置32, 第二个and 在索引位置46
print(mystr.find('and')) #12
print(mystr.find('and',15,35)) #32
print(mystr.find('ands')) #-1 ands子串不存在

字符串查找 index

# 2. index()
mystr='hello world and xinbiancheng.cn and baidu.com and google.cn'
# 第一个and 在12索引位置, 第二个and 在索引位置32, 第二个and 在索引位置46
print(mystr.index('and')) #12
print(mystr.index('and',15,35)) #32
#print(mystr.index('ands')) #如果index查找子串不存在会报错

当index查找不到数据时会报错,报错信息如下:

Traceback (most recent call last):
  File "D:/pythoncode/String/05-字符串常用操作方法之查找.py", line 10, in <module>
    print(mystr.index('ands')) #如果index查找子串不存在会报错
ValueError: substring not found

字符串查找 count

# 3. count()
mystr='hello world and xinbiancheng.cn and baidu.com and google.cn'
# 第一个and 在12索引位置, 第二个and 在索引位置32, 第二个and 在索引位置46
print(mystr.count('and')) # 统计and有3个
print(mystr.count('and',15,35)) #从15到35这个位置统计and有1个
print(mystr.count('ands')) #0

字符串查找 rfind

# 4. rfind()
mystr='hello world and xinbiancheng.cn and baidu.com and google.cn'
# 第一个and 在12索引位置, 第二个and 在索引位置32, 第二个and 在索引位置46
print(mystr.rfind('and'))  # 46
print(mystr.rfind('ands'))  # -1

字符串查找 rindex

mystr='hello world and xinbiancheng.cn and baidu.com and google.cn'
# 第一个and 在12索引位置, 第二个and 在索引位置32, 第二个and 在索引位置46
#5. rindex()
print(mystr.rindex('and'))  # 46
print(mystr.rindex('ands'))  # 报错

当rindex查找不到数据时会报错,报错信息如下:

Traceback (most recent call last):
  File "D:/pythoncode/String/05-字符串常用操作方法之查找.py", line 23, in <module>
    print(mystr.rindex('ands')) #报错
ValueError: substring not found

python replace 字符串替换

字符串替换可以用内置的方法和正则表达式完成。

用字符串本身的replace方法进行替换:

Python 替换字符串使用 变量.replace("被替换的内容","替换后的内容"[,次数]),替换次数可以为空,即表示替换所有。要注意的是使用replace替换字符串后仅为临时变量,需重新赋值才能保存。

a = 'hello word'
b = a.replace('word','python')
print(b)  # hello python

用正则表达式对字符串进行替换

import re
# 导入正则表达式需要要的 re 模块包
a = 'hello word'
reg = re.compile('word')
b = reg.sub('python', a)  # 正则表达式的替换
print(b)  # hello python

更多更详细的正则表达式

字符串分割 split

在Python的高级特性里有切片(Slice)操作符,可以对字符串进行截取。

Python还提供split()函数可以将一个字符串分裂成多个字符串组成的列表。

Python 分割字符串使用

split()的语法:

变量.split(sep,[maxsplit])

sep 是分割符,不写分割符时表示所有的空字符,包括空格、换行(\n)、制表符(\t)等,有分隔符时,以该分隔符进行分割。

maxsplit是分割次数。

分割次数表示分割最大次数,为空则分割所有。

split 不写分隔符 进行字符串分割

L = 'a b c\nd\te'
print(L.split())
# 执行结果:['a', 'b', 'c', 'd', 'e']

结论:当不带参数时,默认是以空字符作为参数,不管空字符在哪,或者有几个全部被分割了!

split 指定分割次数 进行字符串分割

L = 'a b c\nd\te'
print(L.split(' ', 1))
# 执行结果:['a', 'b c\nd\te']

split  以'',''号为分割符 进行字符串分割

L = 'baidu.com,xinbiancheng.cn,google.cn'
print(L.split(','))
# 运行结果:['baidu.com', 'xinbiancheng.cn', 'google.cn']

结论:从左往右分割,遇到一个','号分割一次,左边的部分分割完做为list的一个元素,直到分割完

python中split()和split(' ') 进行字符串分割的区别

用split(" ") 进行字符串分割:

s1 = "I Love xinbiancheng.cn"  # 中间一个空格
s2 = "I  Love  xinbiancheng.cn"  # 中间两个空格
s3 = "I   Love   xinbiancheng.cn"  # 中间三个空格
s4 = "I    Love    xinbiancheng.cn"  # 中间四个空格
s1 = s1.split(" ")
s2 = s2.split(" ")
s3 = s3.split(" ")
s4 = s4.split(" ")
print(s1)  # ['I', 'Love', 'xinbiancheng.cn']
print(s2)  # ['I', '', 'Love', '', 'xinbiancheng.cn']
print(s3)  # ['I', '', '', 'Love', '', '', 'xinbiancheng.cn']
print(s4)  # ['I', '', '', '', 'Love', '', '', '', 'xinbiancheng.cn']

用split() 进行字符串分割:

s1 = "I Love xinbiancheng.cn"  # 中间一个空格
s2 = "I  Love  xinbiancheng.cn"  # 中间两个空格
s3 = "I   Love   xinbiancheng.cn"  # 中间三个空格
s4 = "I    Love    xinbiancheng.cn"  # 中间四个空格
s1 = s1.split()
s2 = s2.split()
s3 = s3.split()
s4 = s4.split()
print(s1)  # ['I', 'Love', 'xinbiancheng.cn']
print(s2)  # ['I', 'Love', 'xinbiancheng.cn']
print(s3)  # ['I', 'Love', 'xinbiancheng.cn']
print(s4)  # ['I', 'Love', 'xinbiancheng.cn']

结论:split()的时候,多个空格当成一个空格;split(' ')的时候,多个空格都要分割,每个空格分割出来空字符串。

由于篇幅限制 python字符串截取、查找、替换、分割 字符串的提取等相关知识,将在下一节中继续,点击广告支持一下,接着再来。