字符串属于不可变序列,支持切片和索引
转义字符 | 含义 | 转义字符 | 含义 |
---|---|---|---|
\b | 退格,将光标移动到前一列的位置 | \\ | 一个斜线\ |
\f | 换页符 | \’ | 单引号‘ |
\n | 换行符 | \‘’ | 双引号’’ |
\r | 回车 | \ooo | 3位8进制数的对应字符 |
\t | 水平制表符 | \xhh | 2位十六进制的对应字符 |
\v | 垂直制表符 | \uhhhh | 4位十六进制的Unicode字符 |
字符串界定符前面加字母r或R表示原始字符串,其中的特殊字符不进行转义,但字符串的最后一个字符不能是\。原始字符串主要用于正则表达式、文件路径或者URL的场合。
>>> path = 'C:\Windows\notepad.exe'
>>> print(path) #字符\n被转义为换行符
C:\Windows
otepad.exe
>>> path = r'C:\Windows\notepad.exe' #原始字符串,任何字符都不转义
>>> print(path)
C:\Windows\notepad.exe
格式字符 | 说明 |
---|---|
%s | 字符串(采用str()的显示) |
%r | 字符串(采用repr()的显示) |
%c | 单个字符 |
%d | 十进制整数 |
%i | 十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数 |
%e | 指数(基底写为e) |
%E | 指数(基底写为E) |
%f、%F | 浮点数 |
%g | 指数(e)或浮点数 (根据显示长度) |
%G | 指数(E)或浮点数 (根据显示长度) |
%% | 一个字符"%" |
多个参数:要格式化的内容,多个要转化的内容使用()
>>>par=("zhang san",18,"男")
>>>template="我叫%s,今年%d,性别%s"
>>>print(template%par)
我叫zhang san,今年18,性别男
>>>a=3
>>>type(a)
>>><class 'int'>
>>>print("%.5f"%a)
3.00000
字符串格式化
使用format方法进行格式化,形式如下:<字符串>.format(<逗号分割的参数>),“{} {}”.format(“hello” , “world”) {} 和 : 来代替以前的 %
{[ index ][:[[fill]align][sign][#][m][.][.n][type]]}index
:参数的序号或者键
fill :填充的字符
align:对齐方式<左对齐>右对齐^居中对齐=右对齐符号在最左侧需要配合占位宽度使用
sign:符号选项+正数正号,负数负号-正数不变,负数负号‘空格正数加空格负数负号
#十六进制八进制二进制数前面加Ox 0o 0bm
占位宽度
.n小数位数type
:格式化字符类型sdbxof
举例:
1、 # 不设置指定位置,按默认顺序
>>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
'hello world'
2、# 设置指定位置{索引:格式}
>>> print("The number {0:,} in hex is: {0:#x}, the number {1} in oct is
{1:#o}".format(5555,55))
The number 5,555 in hex is: 0x15b3, the number 55 in oct is 0o67
3、# 通过字典设置参数
>>> print("my name is {name}, my age is {age}, and my QQ is {qq}".format(name =
"Dong Fuguo",age = 40,qq = "30646****"))
my name is Dong Fuguo, my age is 40, and my QQ is 30646****
4、# 通过列表索引设置参数
>>> position = (5, 8, 13)
>>> print("X:{0[0]};Y:{0[1]};Z:{0[2]}".format(position))
X:5;Y:8;Z:13
5.#Formatted String Literals,在字符串前加字母f,含义与字符串对象format()方法类似。
>>> name = 'Dong'
>>> age = 39
>>> f'My name is {name}, and I am {age} years old.'
'My name is Dong, and I am 39 years old.'
find()、rfind()、index()、rindex()、count()
参数:(str, beg=0, end=len(string))
find()
(从左往右)和rfind()
(从右向左)方法分别用来查找一个字符串在另一个字串指定范围(默认是整个字符串)中首次和最后一次出现的位置,如果不存在则返回-1;index()
和rindex()
方法用来返回一个字符串在另一个字符串指定范围中首次和最后一次现的位置,如果不存在则抛出异常;split()、rsplit()、partition()、rpartition()
split()和rsplit()
方法分别用来以指定字符为分隔符,把当前字符串从左往右或从右往左分隔成多个字符串,并返回包含分隔结果的列表
对于split()和rsplit()
方法,如果不指定分隔符,则字符串中的任何 空白符号(空格、换行符、制表符等)都将被认为是分隔符,把连续 多个空白字符看作一个分隔符。
>>> s = 'hello world \n\n My name is Dong '
>>> s.split()
['hello', 'world', 'My', 'name', 'is', 'Dong']
>>> s = '\n\nhello world \n\n\n My name is Dong '
>>> s.split()
['hello', 'world', 'My', 'name', 'is', 'Dong']
明确传递参数指定split()使用的分隔符时,情况是不一样的
>>> ‘a,,,bb,,ccc’.split(‘,’) #每个逗号都被作为独立的分隔符,两个逗号之间的空串也被分割出来
['a', '', '', 'bb', '', 'ccc']
>>> 'a\t\t\tbb\t\tccc'.split('\t') #每个制表符都被作为独立的分隔符
['a', '', '', 'bb', '', 'ccc']
>>> 'a\t\t\tbb\t\tccc'.split() #连续多个制表符被作为一个分隔符
['a', 'bb', 'ccc']
split()和rsplit()
方法还允许指定最大分割次数
>>> s = '\n\nhello\t\t world \n\n\n My name is Dong '
>>> s.split(None, 1) #不指定分隔符,分割一次
['hello', 'world \n\n\n My name is Dong ']
>>> s.rsplit(None, 1)
['\n\nhello\t\t world \n\n\n My name is', 'Dong']
>>> s.split(None, 2)
['hello', 'world', 'My name is Dong ']
>>> s.rsplit(None, 2)
['\n\nhello\t\t world \n\n\n My name', 'is', 'Dong']
>>> s.split(maxsplit=6)
['hello', 'world', 'My', 'name', 'is', 'Dong']
>>> s.split(maxsplit=100) #最大分隔次数大于可分隔次数时无效
['hello', 'world', 'My', 'name', 'is', 'Dong']
str.split(sep=None, num=string.count(str)). num -- 分割次数,分隔 num+1 个子字符串。默 认为 -1, 即分隔所有
partition()和rpartition()
用来以指定字符串为分隔符将原字符串分隔为3部分,即分隔 符前的字符串、分隔符字符串、分隔符后的字符串,如果指定的分隔符不在原字符串中, 则返回原字符串和两个空字符串。
str.partition(str)
partition()和rpartition()
用来以指定字符串为分隔符将原字符串分隔为3部分,即分隔符前的字符串、分隔符字符串、分隔符后的字符串, 如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串。
>>> s = "apple,peach,banana,pear"
>>> s.partition(',')
('apple', ',', 'peach,banana,pear')
>>> s.rpartition(',')
('apple,peach,banana', ',', 'pear')
>>> s.rpartition('banana')
('apple,peach,', 'banana', ',pear')
字符串连接join():将列表中多个字符串进行连接,并在字符串之间插入指定字符。
>>> li = ["apple", "peach", "banana", "pear"]
>>> ','.join(li)
'apple,peach,banana,pear'
>>> '.'.join(li)
'apple.peach.banana.pear'
>>> '::'.join(li)
'apple::peach::banana::pear'
lower()、upper()、capitalize()、title()、swapcase()
>>> s = "What is Your Name?"
>>> s.lower() #返回小写字符串,一个新的字符串
'what is your name?'
>>> s.upper() #返回大写字符串
'WHAT IS YOUR NAME?'
>>> s.capitalize() #字符串首字符大写
'What is your name?'
>>> s.title() #每个单词的首字母大写
'What Is Your Name?'
>>> s.swapcase() #大小写互换
'wHAT IS yOUR nAME?'
查找替换replace(),返回新的字符串,类似于Word中的“全部替换”功能。
str.replace(old, new[, max])
: old – 将被替换的子字符串; new – 新字符串,用于替换old子字符串。max – 可选字符串, 替换不超过 max 次。
>>> s = "中国,中国"
>>> s2 = s.replace(“中国”, “中华人民共和国”) #查找每个“中国”,替换为“中华民族共和国”,参数是作为整体处理的。
>>> print(s2)
中华人民共和国,中华人民共和国
例题:
测试用户输入中是否有敏感词,如果有的话就把敏感词替换为3个星号***
>>> words = ('测试', '非法', '暴力', '话')
>>> text = '这句话里含有非法内容'
>>> for word in words:
if word in text:
text = text.replace(word, '***')
>>> text
'这句***里含有***内容'
maketrans()
maketrans()
方法用来生成字符映射表,而translate()方法用来根据映射表中定义的对应关系转换字符串并替换其中的字符,使用这两个方法的组合可以同时处理多个字符。str.maketrans(intab, outtab)
:返回字符串字符映射表。intab
– 被替代的字符组成的字符串。outtab
– 相应的映射字符的字符串。str.translate(table)
;返回字符串转换后生成的新字符串。table --字符映射表,通过maketrans
方法转换而来。#创建映射表,将字符"abcdef123"一一对应地转换为"uvwxyz@#$"
>>> table = ''.maketrans('abcdef123', 'uvwxyz@#$')
>>> s = "Python is a greate programming language. I like it!"
#按映射表进行替换
>>> s.translate(table)
'Python is u gryuty progrumming lunguugy. I liky it!'
strip()、rstrip()、lstrip()
,删除两边、右边、左边空白,或者指定字符
str.strip([chars])
, chars – 移除字符串头尾指定的字符串。
>>> s = " abc "
>>> s.strip() #删除两边空白字符,或者指定参数的字符
'abc'
>>> '\n\nhello world \n\n'.strip() #删除空白字符
'hello world'
>>> "aaaassddf".strip("a") #删除指定字符
'ssddf'
>>> "aaaassddfaaa".rstrip("a") #删除字符串右端指定字符
'aaaassddf'
>>> "aaaassddfaaa".lstrip("a") #删除字符串左端指定字符
'ssddfaaa'
这三个函数的参数指定的字符串并不作为一个整体对待,而是在原字符串的两侧、右侧、左侧删除参数字符串中包含的所有字符,一层一层地从外往里扒。
>>> 'aabbccddeeeffg'.strip('af') #字母f不在字符串两侧,所以不删除
'bbccddeeeffg'
>>> ‘aabbccddeeeffg’.strip(‘gaf’) #
'bbccddeee'
>>> 'aabbccddeeeffg'.strip('gaef')
'bbccdd'
>>> 'aabbccddeeeffg'.strip('gbaef')
'ccdd'
>>> 'aabbccddeeeffg'.strip('gbaefcd')
''
s.startswith(str, beg=0,end=len(string)), s.endswith (str, beg=0,end=len(string))
,判断字符 串是否以字符串str
开始或结束,检测到字符串则返回True,否则返回False。
str
– 检测的字符串,也可以是一个字符串元组; beg – 起始位置; end – 结束位置。
>>> s = 'Beautiful is better than ugly.'
>>> s.startswith('Be') #检测整个字符串
True
>>> s.startswith(‘Be’, 5) #指定检测范围起始位置,下标从5开始
False
用来测试字符串:
isalnum() :是否为数字或字母;
isalpha() :是否为字母;
isdigit() : 是否为数字
isspace() :是否为空白字符;
isupper() :是否为大写字母;
islower() :是否为小写字母。
>>> '1234abcd'.isalnum()
True
>>> '1234abcd'.isalpha()
False
>>> '1234abcd'.isdigit()
False
>>> 'abcd'.isalpha()
True
>>> '1234.0'.isdigit()
False
>>> '1234'.isdigit()
True
center()、ljust()、rjust(),返回指定宽度的新字符串,原字符串居中、左对齐或右对齐出现 在新字符串中,如果指定宽度大于字符串长度,则使用指定的字符(默认为空格)进行填充。
zfill()
返回指定宽度的字符串,在左侧以字符0进行填充。
>>> ‘Hello world!’.center(20) #生成长度为20的字符串,原字符串在新字符中居中对齐,两边默认以空格进行填充' Hello world! '
>>> 'Hello world!'.center(20, '=')
#居中对齐,以字符=进行填充'====Hello world!===='
>>> 'Hello world!'.ljust(20, '=') #左对齐
'Hello world!========'
>>> 'Hello world!'.rjust(20, '=') #右对齐
'========Hello world!'
>>> 'abc'.zfill(5)
#在左侧填充数字字符0
'00abc'
>>> 'abc'.zfill(2)
#指定宽度小于字符串长度时,返回字符串本身
'abc'
>>> 'uio'.zfill(20)
'00000000000000000uio'