1. 字符串基础
字符串是Python中常用的基本数据类型之一。在Python中,字符串表示为一连串字符,可以用单引号、双引号或三引号括起来。
# 使用单引号定义字符串
string1 = 'Hello, World!'
# 使用双引号定义字符串
string2 = "Hello, World!"
# 使用三引号定义字符串
string3 = '''Hello,
World!'''
print(string1)
print(string2)
print(string3)
输出结果为:Hello, World!
可以看到,使用单引号或双引号定义的字符串与使用三引号定义的字符串输出结果是一样的,只不过三引号定义的字符串允许跨越多行。
1.1 字符串基本操作
Python中的字符串可以进行一系列基本操作,例如:
字符串连接:使用加号(+)将两个字符串相连接。
字符串重复:使用乘号(*)将字符串重复若干次。
# 字符串连接
string1 = 'Hello,'
string2 = ' World!'
string3 = string1 + string2
print(string3)
# 字符串重复
string4 = 'a' * 5
print(string4)
输出结果为:Hello, World! aaaaa
除此之外,Python还提供了一些字符串操作的内置函数,例如:
len():返回字符串中字符的个数。
str.lower():将字符串中的所有字母转换为小写。
str.upper():将字符串中的所有字母转换为大写。
str.capitalize():将字符串中的第一个字母转换为大写,其他字母转换为小写。
str.title():将字符串中每个单词的首字母都转换为大写。
string = 'Hello, World!'
print(len(string))
print(string.lower())
print(string.upper())
print(string.capitalize())
print(string.title())
输出结果为:13 hello, world! HELLO, WORLD! Hello, world! Hello, World!
1.2 字符串索引与切片
在Python中,字符串是一个序列类型,所以它支持序列操作,例如索引和切片。
字符串索引:Python中字符串的索引从0开始,可以使用中括号([])来访问字符串中的单个字符。
string = 'Hello, World!'
print(string[1])
输出结果为:e
字符串切片:使用切片(:)操作可以获取字符串中的一部分,切片的通用格式为[start:end:step],其中start表示起始位置(默认为0),end表示结束位置(默认为字符串末尾),step表示步长(默认为1)。
string = 'Hello, World!'
print(string[1:5])
print(string[::2])
输出结果为:ello Hlo ol!
2. 字符串常用函数
2.1 字符串查找函数
Python提供了一些用于查找字符串的函数,例如:
str.find(sub[, start[, end]]):返回字符串中子串sub第一次出现的位置,如果没有找到则返回-1。可指定起始(start)和结束(end)位置。
str.index(sub[, start[, end]]):返回字符串中子串sub第一次出现的位置,如果没有找到则会抛出ValueError异常。可指定起始(start)和结束(end)位置。
str.rfind(sub[, start[, end]]):返回字符串中子串sub最后一次出现的位置,如果没有找到则返回-1。可指定起始(start)和结束(end)位置。
str.rindex(sub[, start[, end]]):返回字符串中子串sub最后一次出现的位置,如果没有找到则会抛出ValueError异常。可指定起始(start)和结束(end)位置。
string = 'Hello, World!'
print(string.find('o'))
print(string.index('o'))
print(string.rfind('o'))
print(string.rindex('o'))
输出结果为:4 4 8 8
需要注意的是,如果查找的字符串不存在,find()函数会返回-1,而index()函数会抛出ValueError异常。
2.2 字符串替换函数
Python中的字符串可以使用replace()函数进行替换。replace()函数有两个参数,第一个参数指定要替换的子字符串,第二个参数指定要替换成的新字符串。
string = 'Hello, World!'
new_string = string.replace('World', 'Python')
print(new_string)
输出结果为:Hello, Python!
2.3 字符串拆分函数
Python中的字符串可以使用split()函数进行拆分,它将字符串按照指定的分隔符分成一个列表。
string = 'Hello, World!'
list1 = string.split(',')
list2 = string.split()
print(list1)
print(list2)
输出结果为:['Hello', ' World!'] ['Hello,', 'World!']
如果不指定分隔符,则默认使用空格作为分隔符。
2.4 字符串拼接函数
Python中的字符串可以使用join()函数进行拼接,它将一个列表中的字符串拼接成一个字符串。
list1 = ['Hello', 'World', '!']
string1 = ' '.join(list1)
string2 = ''.join(list1)
print(string1)
print(string2)
输出结果为:Hello World ! HelloWorld!
需要注意的是,在使用join()函数进行字符串拼接时,列表中的元素必须是字符串类型。
2.5 字符串去除函数
Python中的字符串可以使用strip()函数进行去除,它可以去掉字符串开头和结尾的空格和换行符。
string = ' Hello, World! \n'
new_string = string.strip()
print(new_string)
输出结果为:Hello, World!
strip()函数还可以指定要去掉的字符,例如:
string = '***Hello, World!***'
new_string = string.strip('*')
print(new_string)
输出结果为:Hello, World!
2.6 字符串格式化函数
Python中的字符串可以使用format()函数进行格式化,它可以将一个字符串模板中的占位符替换为指定的值。
字符串模板中的占位符使用花括号({})表示,可以使用索引或关键字来指定替换的值。
string = 'My name is {} and I am {} years old.'
new_string = string.format('John', 30)
print(new_string)
输出结果为:My name is John and I am 30 years old.
需要注意的是,在Python 3.6以后,还可以使用f-strings来进行字符串格式化。
name = 'John'
age = 30
new_string = f'My name is {name} and I am {age} years old.'
print(new_string)
输出结果为:My name is John and I am 30 years old.
3. 字符串高级用法
3.1 正则表达式
正则表达式是一种用来匹配字符串的工具,它在Python中的应用非常广泛。Python中的正则表达式可以使用re模块来实现。
下面是一些常用的正则表达式:
^:匹配字符串的开头。
$:匹配字符串的结尾。
.:匹配任意字符。
*:匹配前面的字符0次或多次。
+:匹配前面的字符1次或多次。
?:匹配前面的字符0次或1次。
{n}:匹配前面的字符恰好n次。
{n,}:匹配前面的字符至少n次。
{n,m}:匹配前面的字符至少n次,至多m次。
[]:匹配括号中任意一个字符。
|:匹配两个或多个表达式中的任意一个。
():将括号中的内容作为一个组。
\d:匹配任意数字字符。
\D:匹配任意非数字字符。
\w:匹配任意字母、数字或下划线。
\W:匹配任意非字母、数字或下划线。
\s:匹配任意空白字符。
\S:匹配任意非空白字符。
下面是一个简单的正则表达式示例:
import re
string = 'Hello, World! 123'
pattern = r'\d+'
result = re.findall(pattern, string)
print(result)
输出结果为:['123']
3.2 字符串编码
字符串编码是将字符串转换为字节序列的过程,字节序列在计算机中存储和传输数据更加方便。Python中的字符串编码可以使用encode()函数进行。
常用的编码方式有:
ASCII编码:适用于英语、数字和符号。Python默认的编码方式为ASCII编码。
UTF-8编码:适用于全球性的多语言环境,是互联网上使用最广泛的编码方式。
GB2312编码:适用于简体中文,是中国的国家标准。
GBK编码:适用于简体中文和繁体中文,是中国的国家标准。
string = 'Hello, World!你好,世界!'
encoded_string = string.encode('UTF-8')
print(encoded_string)
输出结果为:b'Hello, World!\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xef\\xbc\\x8c\\xe4\\xb8\\x96\\xe7\\x95\\x8c\\xef\\xbc\\x81'
需要注意的是,在Python 3中,encode()函数返回的是一个字节串(bytes)类型。
3.3 字符串解码
字符串解码是将字节序列转换为字符串的过程,Python中的字符串解码可以使用decode()函数进行。
encoded_string = b'Hello, World!\\xe4\\xbd\\xa0\\xe5\\xa5\\xbd\\xef\\xbc\\x8c\\xe4\\xb8\\x96\\xe7\\x95\\x8c\\xef\\xbc\\x81'
string = encoded_string.decode('UTF-8')
print(string)
输出结果为:Hello, World!你好,世界!
需要注意的是,在Python 3中,decode()函数只能对字节串进行解码,而不能对字符串进行解码。
3.4 字符串格式化
字符串格式化(String Formatting)是指将一个字符串模板中的占位符替换为指定的值。字符串格式化在Python中非常常用,可以使用多种方式进行,例如:
%格式化:类似于C语言的格式化输出。
.format()函数:使用{}作为占位符,可以使用位置参数或关键字参数指定替换的值。
f-strings:Python 3.6以后新添加的语法,使用{}作为占位符,直接在字符串前加上f即可。
下面是一个使用不同方式进行字符串格式化的示例:
# %格式化
name = 'John'
age = 30
string1 = 'My name is %s and I am %d years old.' % (name, age)
print(string1)
# .format()函数
name = 'John'
age = 30
string2 = 'My name is {} and I am {} years old.'.format(name, age)
print(string2)
# f-strings
name = 'John'
age = 30
string3 = f'My name is {name} and I am {age} years old.'
print(string3)
输出结果为:My name is John and I am 30 years old. My name is John and I am 30 years old. My name is John and I am 30 years old.