Python学习笔记 - str 字符串

[TOC]

字符串的形式

  • ‘content’
  • “content”
  • ‘’’multiline content’’’

使用引号引起来的内容为字符串,单引号和双引号引起来的字符串含义完全一样,在内部需要一种字符串时在外部使用另一种字符串即可。

使用三个引号引起来的内容为多行字符串,三个单引号和三个双引号的含义完全一样。单行字符串不能跨行定义而多行字符串可以。

字符串是「只读」的,一切方法都是返回一个新的字符串而不会改变这个字符串。

转义

格式化字符串

百分号格式化(尽量不要再使用)

大括号格式化

  1. 在字符串中传入若干个 {} 标识符或使用命名的标识符 {str},然后通过 .format.format_map 方法传入参数可以进行格式化输出
  2. 使用 .format 方法格式化时,不命名的格式化标识符应该先依次传入,然后再将命名的标识符传入,传入时所命的名需要作为方法参数的 keyå
  3. 使用 .format_map 方法时必须传入标识符,这个方法接收一个以所命名为键格式化替换值为值的字典
1
2
3
4
5
6
7
8
9
10
11
s = "Hello, {}. I'm {}"
s.format('sir', 'Singee') # "Hello, sir. I'm Singee"

s = "Hello, {}. I'm {name}"
s.format('sir', name='Singee') # "Hello, sir. I'm Singee"

s = "Hello, {you}. I'm {}"
s.format('Singee', you='sir') # "Hello, sir. I'm Singee"

s = "Hello, {you}. I'm {me}"
s.format_map({'you': 'sir', 'me': 'Singee'}) # "Hello, sir. I'm Singee"

字符串的切割与合并

切片

与列表、元组的切片相同

split 方法

.split 方法接收两个参数,会返回一个使用第一个参数作为分割符的列表,分割次数为第二个参数。省略第一个参数则默认使用空白符分割,省略第二个参数则认为完全分割。

1
2
3
4
5
6
7
s = 'Hello, this is Singee'
s.split() # ['Hello,', 'this', 'is', 'Singee']
s.split('s') # ['Hello, thi', ' i', ' Singee']
s.split('s', 1) # ['Hello, thi', ' is Singee']
s.split('is') # ['Hello, th', ' ', ' Singee']
s = '\r \n Hello, this is Singee\n' # ['Hello,', 'this', 'is', 'Singee']
s.split()

rsplit 方法

.rsplit 方法和 split 在只有第一个参数时相同,在拥有第二个参数时,分割模式为从右到左分割。

1
2
3
4
s = 'Hello, this is Singee'
s.rsplit() # ['Hello,', 'this', 'is', 'Singee']
s.rsplit('s') # ['Hello, thi', ' i', ' Singee']
s.rsplit('s', 1) # ['Hello, this i', ' Singee']

join 方法

str1.join([str2, str3, ...]) 会将 str2str3 等通过 str1 连接起来

1
2
3
''.join(['m', 'n', 'o']) # 'mno'
'---'.join(['m', 'n', 'o']) # 'm---n---o'
'---'.join(('m', 'n', 'o')) # 'm---n---o',join 内传入一个由字符串组成的可迭代对象即可

应用:去除一个字符串中的全部空格

''.join(s.split())

1
2
s = '   adf ja   adf ad   '
''.join(s.split()) # 'adfjaadfad'

字符串查找

count 方法

.count(str) 方法用于统计字符串中指定字符串出现的次数

1
2
3
s = 'abccdddeeeeddf'
s.count('c') # 2
s.count('dd') # 2

in 操作符

str1 in str2,如果 str2 中含有 str1,则返回 True,否则返回 False

1
2
3
4
s = 'abcd'
'a' in s # True
'ab' in s # True
'e' in s # False

find 方法

.find(str) 方法会返回传入的字符串在原字符串中第一次出现的位置(第一个位置为 0),找不到会返回 -1

此方法可以接受第二个与第三个参数,第二个参数为搜寻开始的位置(包含),第三个参数为搜寻结束的位置(不包含)

1
2
3
4
5
s = 'abbaabbba'
s.find('a') # 0
s.find('bbb') # 5
s.find('c') # -1
s.find('a', 3, 6) # 3

rfind 方法

.rfind(str) 方法会返回传入的字符串在原字符串中最后一次出现的位置(第一个位置为 0),找不到会返回 -1

此方法可以接受第二个与第三个参数,第二个参数为搜寻开始的位置(包含),第三个参数为搜寻结束的位置(不包含)

1
2
3
4
5
6
s = 'abbaabbba'
s.rfind('a') # 8
s.rfind('bbb') # 5
s.rfind('c') # -1
s.rfind('a', 3, 8) # 4
s.rfind('a', 3, 9) # 8

index 方法

.index(str) 方法和 find 类似,但是 index 如果找不到这个字符串的话会报错

rindex 方法

.rindex(str) 方法和 rfind 类似,但是 rindex 如果找不到这个字符串的话会报错

startswith 方法

需要传入一个字符串作为一个参数,如果原字符串是以这个字符串开头的则返回 True,否则返回 False

1
2
3
4
a = 'test123and'
a.endswith('t') # True
a.endswith('test') # True
a.endswith('tes3') # False

endswith 方法

需要传入一个字符串作为一个参数,如果原字符串是以这个字符串结尾的则返回 True,否则返回 False

1
2
3
4
a = 'test123and'
a.endswith('d') # True
a.endswith('3and') # True
a.endswith('3nd') # False

字符串替换(replace 方法)

.replace() 方法接受三个参数,第一个参数为被替换的字符串,第二个参数为替换为的字符串,第三个参数为替换的次数(默认为全部替换)

1
2
3
s = 'abcdabcdabcd'
s.replace('abc', '---') # '---d---d---d'
s.replace('abc', '---', 2) # '---d---dabcd'

字符串的大小写转换

lower 方法

将字符串中的全部字符转换为小写

1
2
3
4
5
a = 'Hello. How are you?'
a.lower() # 'hello. how are you?'

a = 'ΑβΓ'
a.lower() # 'αβγ'

upper 方法

将字符串中的全部字符转换为大写

1
2
3
4
5
a = 'Hello. How are you?'
a.upper() # 'HELLO. HOW ARE YOU?'

a = 'ΑβΓ'
a.upper() # 'ΑΒΓ'

capitalize 方法

将字符串的第一个字符变为大写,其余变为小写

1
2
3
4
5
6
7
8
9
10
11
s = 'hello,World!'
s.capitalize() # 'Hello,world!'

s='hello. nice to meet you'
s.capitalize() # 'Hello. nice to meet you'

s = ' hello,World!'
s.capitalize() # ' hello,world!'

s = 'αhello,ΑWorld!'
s.capitalize() # 'Αhello,αworld!'

swapcase 方法

将字符串的所有字符的大小写反转

1
2
3
4
5
6
7
8
9
10
11
s = 'hello,World!'
s.swapcase() # 'HELLO,wORLD!'

s='hello. nice to meet you'
s.swapcase() # 'HELLO. NICE TO MEET YOU'

s = ' hello,World!'
s.swapcase() # ' HELLO,wORLD!'

s = 'αhello,ΑWorld!'
s.swapcase() # 'ΑHELLO,αwORLD!'

casefold 方法(非常不常用)

将字符串中的全部字符转换为小写

1
2
3
4
5
a = 'Hello. How are you?'
a.casefold() # 'hello. how are you?'

a = 'ΑβΓ'
a.casefold() # 'αβγ'

Casefolding is similar to lowercasing but more aggressive because it is intended to remove all case distinctions in a string. For example, the German lowercase letter ‘ß’ is equivalent to “ss”. Since it is already lowercase, lower() would do nothing to ‘ß’; casefold() converts it to “ss”.

title 方法

当字符串中有多个单词时,将每个单词的首字母大写而其他的小写。

1
'mOre ThAn this'.title() # 'More Than This'

判断字符串类型

isalnumber 方法

如果此字符串中只有单字节字符和数字则返回 True 否则返回 False

1
2
3
4
5
6
'abc123'.isalnum() # True
'abc'.isalnum() # True
'123'.isalnum() # True
'α'.isalnum() # True
'1.3'.isalnum() # False
'1&3'.isalnum() # False

isalpha 方法

如果此字符串中只有单字节字符则返回 True 否则返回 False

1
2
3
4
'abc'.isalpha() # True
'α'.isalpha() # True
'abc123'.isalpha() # False
'abc!'.isalpha() # False

islower 方法

如果字符串中只有小写字符则返回 True 否则返回 False

1
2
3
4
5
6
'abc'.islower() # True
'Abc'.islower() # False
'α'.islower() # True
'Α'.islower() # False
'1'.islower() # False
'我'.islower() # False

isupper 方法

如果字符串中只有大写字符则返回 True 否则返回 False

1
2
3
4
5
6
'ABC'.isupper() # True
'ABc'.isupper() # False
'α'.isupper() # False
'Α'.isupper() # True
'1'.isupper() # False
'我'.isupper() # False

isdigit 方法

如果此字符串中只有数字则返回 True 否则返回 False

对于 Unicode 数字,byte数字(单字节),全角数字(双字节)会返回 True,而对于罗马数字和汉字数字会返回 False

1
2
3
4
5
'123'.isdigit() # True
'Ⅷ'.isdigit() # False
b'123'.isdigit() # True
'abc123'.isdigit() # False
'1.23'.isdigit() # False

isdecimal 方法

检查字符串是否只包含十进制字符

对于 Unicode 数字、全角数字(双字节)会返回 True,而对于罗马数字和汉字数字会返回 False。byte数字(单字节)无此方法。

1
'123'.isdecimal() # True

isnumeric 方法

检查字符串是否为数字

对于 Unicode 数字、全角数字(双字节)、罗马数字和汉字数字会返回 True,其他会返回 False。byte数字(单字节)无此方法。

1
2
3
4
5
'123'.isnumeric() # True
'Ⅷ'.isnumeric() # True
'零'.isnumeric() # True
'abc123'.isnumeric() # False
'1.23'.isnumeric() # False

isspace 方法

判断字符串内容是否全是空白符(空格、制表符、换行、回车等),是则返回 True 否则返回 False

1
2
3
' \t\r\n'.isspace() # True
'\0'.isspace() # False
' a '.isspace() # False

isidentifier 方法

判断字符串内容是否符合变量名条件,即满足以下条件:

  1. 只包含字母、数字、下划线(实际上中文等也可以)
  2. 不以数字开头
  3. 可以使用保留字

istitle 方法

当字符串中至少有一个字母,且多个用空白符分割的单词满足以大写字母开头后接小写字母则返回 True,否则返回 False

去除字符串开头结尾的指定字符

strip 方法

.strip(chars=None) 要求提供一个字符串(不提供默认为空白符),执行后会返回一个新的字符串,此字符串前后没有 chars 参数所提供的字符串中的任何一个字符。

1
2
3
4
5
6
s = '   \n   \t \nasdfa   \n \t\r\n'
s.strip() # 'asdfa'
s.strip(' ') # \n \t \nasdfa \n \t\r\n'

s = ' kajsdhjkahdje '
s.strip('jack Lee') # 'sdhjkahd'

lstrip 方法

与 strip 类似,不过只去除左侧的字符

rstrip 方法

与 strip 类似,不过只去除右侧的字符

字符串的对齐方法

center 方法

  1. .center(width[, char]) 返回长度为 width 的字符串,字符串左右使用尽可能相同的 char 参数提供的字符填充。
  2. 不提供 char 参数则默认为空格
  3. width 参数小于等于原字符串的长度时,原样返回
  4. 无法使左右字符数相等时候,左侧字符会比右侧少 1
1
2
3
4
5
a = 'hello'
a.center(20) # ' hello '
a.center(19, '-') # '-------hello-------'
a.center(3) # 'hello'
a.center(8, '-') # '-hello--'

ljust 方法

  1. .ljust(width[, char]) 返回长度为 width 的字符串,字符串右边使用 char 参数提供的字符填充。
  2. 不提供 char 参数则默认为空格
  3. width 参数小于等于原字符串的长度时,原样返回
1
2
3
4
5
a = 'hello'
a.ljust(20) # 'hello '
a.ljust(20, '-') # 'hello---------------'
a.ljust(3) # 'hello'
a.ljust(8, '-') # 'hello---'

rjust 方法

  1. .rjust(width[, char]) 返回长度为 width 的字符串,字符串左边使用 char 参数提供的字符填充。
  2. 不提供 char 参数则默认为空格
  3. width 参数小于等于原字符串的长度时,原样返回
1
2
3
4
5
a = 'hello'
a.rjust(20) # ' hello'
a.rjust(20, '-') # '---------------hello'
a.rjust(3) # 'hello'
a.rjust(8, '-') # '---hello'

字符串的其他方法

expandtabs 方法

.expandtabs(tabsize) 方法可以把字符串中的 \t 转为空格,tab 符号(‘\t’)默认的空格数是 7。