文章目录
导语
欢迎来到本系列教程的第六篇,之前的文章已经介绍了基本的输入和输出,变量、数据类型和操作符,列表和元组,本章将重点介绍如何操作字符串和正则表达式的应用。字符串几乎是所有编程语言在项目开发过程中涉及最多的一块内容,而正则表达式则是处理和匹配字符串的强大工具。在本篇博客中,我们将一步步介绍字符串的常用操作,然后深入探讨正则表达式的基本语法和在 Python 中的应用。
字符串常用操作
拼接字符串
拼接字符串是将多个字符串连接成一个字符串的操作。在Python中,我们可以使用加号(+)或者字符串对象的 join() 方法来实现字符串的拼接。例如:
mot_en = 'Remember is a form of meeting,Frgetfulness is a form of freedom.'
mot_cn = '记忆是一种相遇,遗忘是一种自由。'
print(mot_en+'——'+mot_cn)
str_list = ['Hello','world'] # 字符串对象有个 join() 方法,接收的参数是一个由字符串组成的可迭代对象
print(' '.join(str_list)) # 连接符是一个空格
输出结果为:
Remember is a form of meeting,Frgetfulness is a form of freedom.——记忆是一种相遇,遗忘是一种自由。
Hello world
计算字符串的长度
计算字符串的长度是获取字符串中字符个数的操作。在 Python 中,可以使用 len() 函数来获得字符串的长度。例如:
str1 = '人生苦短,我用Python!'
length1 = len(str1) # 计算字符串长度
print(length1)
输出结果为:
14
从上面的结果中可以看出,在默认的情况下,通过 len() 函数计算字符串的长度时,不区分英文、数字和汉字,所有字符都认为是一个。在实际开发时,有时需要获取字符串实际所占的字节数,即如果采用 UTF-8 编码,汉字占 3 个字节,采用 GBK 或者 GB2312 时,汉字占 2 个字节。这时,可以通过使用 encode() 方法进行编码后再进行获取。例如,如果要获取采用 UTF-8 或者 GBK 编码的字符串的长度,可以使用下面的代码:
str1 = '人生苦短,我用Python!'
length2 = len(str1.encode()) # 计算 UTF-8 编码的字符串长度
print(length2)
length3 = len(str1.encode('gbk')) # 计算 GBK 编码的字符串长度
print(length3)
输出结果为:
28
21
截取字符串
截取字符串是从一个字符串中提取出部分内容的操作。在 Python 中,可以使用切片来截取字符串。切片使用方括号和索引来指定要截取的范围。例如:
str = "Hello World"
sub_str = str[6:11]
print(sub_str)
输出结果为:
World
分割字符串
分割字符串是将一个字符串按照特定的分隔符拆分成多个子串的操作。在 Python 中,可以使用 split() 函数来实现字符串的分割。例如:
str2 = '机 电 研 究 生 >>> blog.csdn.net/a2360051431'
list1 = str2.split() # 采用默认分隔符进行分割
list2 = str2.split('>>>') # 采用多个字符进行分割
list3 = str2.split('.') # 采用"."进行分割
list4 = str2.split(' ',4) # 采用空格进行分割,并且只分割前四个
print(str(list1)+'\n'+str(list2)+'\n'+str(list3)+'\n'+str(list4))
list5 = str2.split('>') # 采用 ">" 进行分割
print(list5)
输出结果为:
['机', '电', '研', '究', '生', '>>>', 'blog.csdn.net/a2360051431']
['机 电 研 究 生 ', ' blog.csdn.net/a2360051431']
['机 电 研 究 生 >>> blog', 'csdn', 'net/a2360051431']
['机', '电', '研', '究', '生 >>> blog.csdn.net/a2360051431']
['机 电 研 究 生 ', '', '', ' blog.csdn.net/a2360051431']
在使用
split()方法时,如果不指定参数,默认采用空白符进行分割,这时无论有几个空格或者空白符都将作为一个分隔符进行分割。例如,上面示例中, 在 “生” 和 “>” 之间有两个空格,但是分割结果(第一行内容)中已经被全部过滤掉了。但是,如果指定一个分隔符,那么当这个分隔符出现多个时,就会每个分隔一次,没有得到内容的,将产生一个空元素。例如,上面结果中的最后一行,就出现了两个空元素。
检索字符串
检索字符串是在一个字符串中查找指定的子串并返回其位置的操作。在 Python 中,可以使用 count() 方法检索指定字符串在另一个字符串中出现的次数。如果检索的字符串不存在,则返回 0,否则返回出现的次数。可以使用 index() 方法或者 find() 方法来实现字符串的检索。
find() 方法用于检索是否包含指定的子字符串。如果检索的字符串不存在,则返回 -1,否则返回首次出现该子字符串时的索引。
index() 方法同 find() 方法类似,也是用于检索是否包含指定的子字符串。只不过如果使用 index() 方法,当指定的字符串不存在时会抛出异常。
startswith() 方法用于检索字符串是否以指定子字符串开头。如果是则返回 True,否则返回 False。
endswith() 方法用于检索字符串是否以指定子字符串结尾。如果是返回 True,否则返回 False。
str3 = '@FaceBook@扎克伯格@雷军'
print('字符串"',str3,'"中包括',str3.count('@'),'个@符号')
print('字符串"',str3,'"中@符号首次出现的位置索引为:',str3.find('@'))
print('字符串"',str3,'"中@符号首次出现的位置索引为:',str3.index('@')) # find()检索的字符串不存在返回-1,index()则会抛出异常
print('判断字符串"',str3,'"是否以@符号开头,结果为:',str3.startswith('@'))
print('判断字符串"',str3,'"是否以雷军结尾,结果为:',str3.endswith('雷军'))
输出结果为:
字符串" @FaceBook@扎克伯格@雷军 "中包括 3 个@符号
字符串" @FaceBook@扎克伯格@雷军 "中@符号首次出现的位置索引为: 0
字符串" @FaceBook@扎克伯格@雷军 "中@符号首次出现的位置索引为: 0
判断字符串" @FaceBook@扎克伯格@雷军 "是否以@符号开头,结果为: True
判断字符串" @FaceBook@扎克伯格@雷军 "是否以雷军结尾,结果为: True
字母的大小写转换
字母的大小写转换是将字符串中的字母字符转换为大写或小写形式的操作。在 Python 中,可以使用 upper() 函数将字母转换为大写,使用 lower() 函数将字母转换为小写。例如:
str = "Hello World"
upper_str = str.upper()
lower_str = str.lower()
print(upper_str)
print(lower_str)
输出结果为:
HELLO WORLD
hello world
去除字符串中的空格和特殊字符
去除字符串中的空格和特殊字符是清理字符串中不需要的部分的操作。在 Python 中,可以使用 strip() 方法来去除字符串两端的空格和特殊字符,也可以使用 lstrip() 方法去除字符串左边的空格和特殊字符,或使用 rstrip() 方法去除字符串中右边的空格和特殊字符。使用 replace() 函数来替换特定的字符。例如:
str = " Hello World! "
trimmed_str1 = str.strip()
trimmed_str2 = str.strip('! ') # 去除字符串首尾的 "!" " "
trimmed_str3 = str.lstrip()
trimmed_str4 = str.rstrip()
replaced_str = str.replace("!", "")
print(trimmed_str1)
print(trimmed_str2)
print(trimmed_str3)
print(trimmed_str4)
print(replaced_str)
输出结果为:
Hello World!
Hello World
Hello World!
Hello World!
Hello World
格式化字符串
格式化字符串是指先制定一个模板,在这个模板中预留几个空位,然后再根据需要填上相应的内容。这些空位需要通过指定的符号标记(也称为占位符),而这些符号还不会显示出来。在Python中,可以使用占位符(%)、format() 方法、f-string 格式化字符串(更加推荐)和模板字符串来实现字符串的格式化。例如:
-
使用百分号(%)格式化字符串:这是一种传统的格式化字符串的方法,通过在字符串中使用占位符和 % 运算符来表示要插入的变量。例如:
name = "Alice"
age = 25
formatted_str = "My name is %s and I'm %d years old." % (name, age)
print(formatted_str)
输出结果为:
My name is Alice and I'm 25 years old.
-
使用字符串对象的
format()方法:这是一种更现代化的格式化字符串的方法,通过在字符串中使用花括号 {} 和format()方法来表示要插入的变量。例如:
name = "Alice"
age = 25
formatted_str = "My name is {} and I'm {} years old.".format(name, age)
print(formatted_str)
输出结果为:
My name is Alice and I'm 25 years old.
-
使用 f-string(格式化字符串常量):这是 Python 3.6 及更高版本引入的一种简洁而直观的格式化字符串的方法,通过在字符串前加上字母 “f” 并在花括号 {} 中使用变量来表示要插入的值。例如:
name = "Alice"
age = 25
formatted_str = f"My name is {name} and I'm {age} years old."
print(formatted_str)
输出结果为:
My name is Alice and I'm 25 years old.
-
使用模板字符串:模板字符串是一种更灵活的字符串格式化方法,它使用
string.Template类和占位符来替换变量。例如:
from string import Template
name = "Alice"
age = 25
template = Template("My name is $name and I'm $age years old.")
formatted_str = template.substitute(name=name, age=age)
print(formatted_str)
输出结果为:
My name is Alice and I'm 25 years old.
正则表达式基础
在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码,它使用一系列的符号和特殊字符来描述字符串的模式。接下来,让我们了解一些正则表达式的基本概念。
行定位符
行定位符用于匹配字符串的开头和结尾。在正则表达式中,使用 ^ 表示字符串的开头,使用 $ 表示字符串的结尾。例如:
^tm # 该表达式表示要匹配以 tm 子串开头的字符串
tm$ # 该表达式表示要匹配以 tm 子串结尾的字符串
tm # 该表达式表示要匹配 tm 子串出现在任意部分的字符串
元字符
元字符是正则表达式中具有特殊意义的字符。除了上面的 ^ 和 $ 外,正则表达式里还有更多的元字符,常见的元字符包括 .(匹配换行符外的任意字符)、\d(匹配数字)、\w(匹配字母、数字、下划线)等。例如:
| 元字符 | 描述 |
|---|---|
| . | 匹配除换行符外的任意字符。 |
| \w | 匹配字母、数字或下划线。等价于 [a-zA-Z0-9_]。 |
| \d | 匹配数字。等价于 [0-9]。 |
| \s | 匹配空白字符,包括空格、制表符、换行符等。 |
| \b | 匹配单词的边界。 |
| 匹配字符串的开头。 | |
| $ | 匹配字符串的结尾。 |
限定符
限定符用于指定匹配的数量。常见的限定符包括 ?(匹配前面的元素零次或一次)、+(匹配前面的元素一次或多次)、*(匹配前面的元素零次或多次)等。例如:
| 限定符 | 描述 | 举例 |
|---|---|---|
| ? | 匹配前面的元素零次或一次。 | colou?r,该表达式可以匹配 colour 和 color |
| + | 匹配前面的元素一次或多次。 | go+gle,该表达式可以匹配的范围从 gogle 到 goo…gle |
| * | 匹配前面的元素零次或多次。 | go*gle,该表达式可以匹配的范围从 ggle 到 goo…gle |
| {n} | 匹配前面的元素恰好n次。 | go{2}gle,该表达式只匹配 google |
| {n,} | 匹配前面的元素至少n次。 | go{2,}gle,该表达式可以匹配的范围从 google 到goo…gle |
| {n,m} | 匹配前面的元素至少n次但不超过m次。 | employe{0,2},该表达式可以匹配 employ、employe 和 employee 3 种情况 |
字符类
字符类用于匹配一组字符中的任意一个。在正则表达式中,可以使用方括号 [] 来定义字符类。例如,[abc] 表示匹配字符 a、b 或 c;[aeiou] 就匹配任何一个英文元音字母。
要想匹配给定字符串中任意一个汉字,可以使用
[\u4e00-\u9fa5];如果要匹配连续多个汉字,可以使用[\u4e00-u9fa5]+。
排除字符
排除字符用于匹配不在指定字符类中的字符。在正则表达式中,可以使用脱字符 ^ 来表示排除字符,这个元字符在行定位符中出现过,表示行的开始,而这里将会放到方括号中,表示排除的意思。例如,[^0-9] 表示匹配任意非数字字符;[^a-zA-Z] 表示匹配一个不是字母的字符。
选择字符
选择字符用于匹配多个模式中的一个。在正则表达式中,可以使用竖线 | 来表示选择。例如,cat|dog 表示匹配 cat 或 dog。
匹配身份证的表达式可以写成如下方式:
(^\d{15}$)|(^\d{18}$)|(^\d{17})(\d|X|x)$
该表达式的意思是匹配 15 位数字,或者 18 位数字,或者 17 位数字和最后一位。最后一位可以是数字或者是 X 或者是 x。
转义字符
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典