字符串是 Python 中最常用的数据类型之一,它可以包含字母、数字、符号、标点以及空格和换行符。本文将介绍字符串的基本概念和操作方法。
创建字符串
在 Python 中,可以通过将字符(字母、符号或数字)放在一对单引号 ''
或双引号 ""
之间来创建字符串。
bash
print("hello") # hello
print('hello') # hello
单引号和双引号可以混合使用。当单引号被双引号包围时,单引号属于字符串的一部分;当双引号被单引号包围时,双引号属于字符串的一部分。
swift
print("'oxxo' is my name") # 'oxxo' is my name
print('"oxxo" is my name') # "oxxo" is my name
对于多行字符串(即文本较多且包含换行的字符串),可以使用连续三个单引号将文本包围起来,这样 Python 将会保留文本中的换行。
ini
a = """Millions of developers and companies build,
ship, and maintain their software on GitHub---the
largest and most advanced development platform
in the world."""
print(a)
此外,还可以使用 str()
函数将其他类型的数据转换成字符串。例如,将数字 123
转换成字符串 '123'
。
scss
a = str(123)
print(a) # '123'
转义字符
所谓的「转义」,是指改变字符串中某些字符的特殊意义。在需要转义的字符前加上反斜杠 \
,就可以赋予这些字符特殊的含义。常用的转义字符包括:
-
\\
:转义反斜杠 -
\'
:显示单引号 -
\"
:显示双引号 -
\b
:退格(删除前一个字符) -
\n
:换行 -
\t
:制表符(tab键)
例如,下面的代码演示了如何在字符串中使用转义字符。让结果同时显示单引号、双引号和反斜杠。
arduino
a = 'hello "World", my name is \'oxxo\', \\\\'
print(a)
# hello "World", my name is 'oxxo', \\
下方的例子使用 \n
进行换行。
ini
a = 'hello World,\nmy name is oxxo,\nhow are you?'
print(a)
# hello World,
# my name is oxxo,
# how are you?
原始字符串
在字符串前加上 r
表示这是一个「原始字符串」(raw string),不会进行转义。下方的程序执行时,a
会打印出原样(因为不进行转义),b
则会将 \n
转义为换行,就会打印出换行的结果。
python
a = r'123\n456'
b = '123\n456'
print(a) # 123\n456
print(b)
# 123
# 456
字符串拼接
字符串拼接有三种方式:+
号、字符串相加、括号。
- 使用
+
号可以针对「变量」与「字符串字面量」进行拼接。
ini
a = 'hello'
b = ' world'
c = a + b + '!!!'
print(c)
# hello world!!!
- 使用「字符串相加」只能针对「字符串字面量」(不是变量)进行拼接。
ini
a = 'hello' ' world' '!!!'
print(a)
# hello world!!!
如果有很多字符串,可以将其放在括号里进行拼接。
ini
a = ('a' "b" 'c' "'" 'ok' "'")
print(a)
# abcok
重复字符串
在字符串后面使用 *
加上数字,可以指定该字符串要重复的次数。下方的例子,将会将 ok
重复10次。
ini
a = 'ok'*10
print(a)
# okokokokokokokokokok
如果数字是字符串,也可以使用 *
进行重复。下方的例子,会出现 20 个 ok
。
ini
a = 'ok'*5
b = a * 4
print(b)
# okokokokokokokokokokokokokokokokokokokok
获取字符串中的字符或子串
使用 []
可以获取某个字符,因为每个字符在字符串中都有各自的「索引 offset」,从左边数第一个索引为 0,接下来的是 1。如果指定 -1 则会取最右边的字符,-2 则是从右边数的第二个,依此类推。
ini
a = 'hello world'
print(a[0]) # h(第一个字符)
print(a[3]) # l(第四个字符)
print(a[-1]) # d(最后一个字符)
如果要取得某一串文字,可以使用「切片」的方式,定义切片的方式为一组方括号、一个 start(开始索引)、一个 end(结束索引)和中间的 step(间隔),常见的规则如下:
定义 | 说明 |
---|---|
[] |
取出全部字符,从开始到结束 |
[start:] |
取出 start 的位置一直到结束的字符 |
[:end] |
取出从开始一直到 end 的「前一个位置」的字符 |
[start:end] |
取出从 start 位置到 end 的「前一个位置」的字符 |
[start:end:step] |
取出 start 位置到 end 的「前一个位置」的字符,跳过 step 个字符 |
ini
a = '0123456789abcdef'
print(a[:])
# 输出 0123456789abcdef(取出全部字符)
print(a[5:])
# 输出 56789abcdef(从 5 开始到结束)
print(a[:5])
# 输出 01234(从 0 开始到第 4 个(5-1))
print(a[5:10])
# 输出 56789(从 5 开始到第 9 个(10-1))
print(a[5:-3])
# 输出 56789abc(从 5 开始到倒数第 4 个(-3-1))
print(a[5:10:2])
# 输出 579(从 5 开始到第 9 个,中间跳过 2 个)
获取字符串长度
len()
函数可以取得一串字符串的长度(总共包含多少个字符),取得的长度不包含转义字符。下方的例子会显示 a 的字符串长度。
python
a = '0123456789-\\\"\''
print(len(a)) # 15
print(a) # 0123456789-\"'
拆分字符串
split()
函数可以将一个字符串,根据指定的「分隔符」拆分成一系列字符串。如果不指定分隔符,默认以空白字符进行拆分。
scss
a = 'hello world, I am oxxo, how are you?'
b = a.split(',')
c = a.split(' ')
d = a.split()
print(b) # ['hello world', ' I am oxxo', ' how are you?']
print(c) # ['hello', 'world,', 'I', 'am', 'oxxo,', 'how', 'are', 'you?']
print(d) # ['hello', 'world,', 'I', 'am', 'oxxo,', 'how', 'are', 'you?']
替换字符串
replace()
函数有三个参数:原始字符串,新的字符串,替换的数量。如果没有指定数量,就会将内容中所有指定的字符串替换成新的字符串。
如果要进行更复杂规则的替换,就需要使用「正则表达式」。
ini
a = 'hello world, lol'
b = a.replace('l', 'xxx')
c = a.replace('l', 'xxx', 2)
print(b) # hexxxxxxo worxxxd, XxXoxxx (所有的 l 都被换成 XXX)
print(c) # hexxxxxXo world, lol(前两个 l 被换成 XXX)
移除字符
strip()
函数可以去除字符串头或尾的空白字符,使用 rstrip()
函数可以只去除右边的空白字符,使用 lstrip()
函数可以只去除左边的空白字符。括号内可以填入指定的字符,就会将开头或结尾指定的字符去除。
ini
a = ' hello!!'
b = a.strip()
e = a.strip('!')
c = a.lstrip()
d = a.rstrip()
print(b) # hello!!
print(c) # hello!!
print(d) # hello!!
print(e) # hello
搜索字符串
如果要查找字符串中的某个字符,可以使用 find()
或 index()
函数。这两个函数从左侧开始查找,找到指定的字符串或字符时,会返回第一次出现的位置(offset)。如果改成 rfind()
或 rindex()
就会从右侧开始查找,找到指定的字符串或字符时,会返回最后一次出现的位置(offset)。如果没有找到结果,find()
会返回 -1 的数值,index()
会直接抛出错误信息。
ini
a = 'hello world, I am oxxo, I am a designer!'
b = a.find('am')
c = a.rfind('am')
print(b) # 15(第一个 'am' 在 15 的位置)
print(c) # 26(最后一个 'am' 在 26 的位置)
下方列出一些好用的查找函数:
-
startswith()
函数用来判断字符串是否以某个子串开头,符合返回 True,不符合返回 False。 -
endswith()
函数用来判断字符串是否以某个子串结尾,符合返回 True,不符合返回 False。 -
isalnum()
函数用来判断字符串是否只包含字母和数字,符合返回 True,不符合返回 False。 -
count()
函数用来判断某个子串在字符串中出现了多少次。
ini
a = 'hello world, I am oxxo, I am a designer!'
b = a.startswith('hello')
c = a.endswith('hello')
d = a.isalnum()
e = a.count('am')
print(b) # True(开头是 'hello')
print(c) # False(结尾不是 'hello')
print(d) # False(里面包含逗号和感叹号)
print(e) # 2(出现 2 次 'am')
大小写转换
Python 提供了四种内置的转换函数来处理字符串的大小写:
-
title()
函数将每个单词的首字母大写。 -
upper()
函数将所有字母大写。 -
lower()
函数将所有字母小写。 -
swapcase()
函数将每个字母的大小写对调。
ini
a = 'Hello world, I am OXXO'
b = a.title()
c = a.upper()
d = a.lower()
e = a.swapcase()
print(b) # Hello World, I Am Oxxo
print(c) # HELLO WORLD, I AM OXXO
print(d) # hello world, i am oxxo
print(e) # hELLO WORLD, i AM oxxo