字符串" @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。
转义字符
转义字符用于匹配具有特殊意义的字符本身。在正则表达式中,可以使用反斜杠 \
来表示转义字符。例如,\.
表示匹配句点字符。
分组
通过匹配身份证的例子,相信读者已经对小括号的作用有了一定的了解。小括号字符的第一个作用就是可以改变限定符的作用范围,如 ‘|’、‘*’、‘^’ 等。例如下面的表达式中包含小括号。
(six|four)th
这个表达式的意思是匹配单词 sixth 或 fourth,如果不使用小括号,那么就变成了匹配单词 six 和 fourth 了。
小括号的第二个作用是分组,也就是子表达式。如 (.[0-9]{1,3}){3}
,就是对分组 (.[0-9]{1,3})
进行重复操作。
在Python中使用正则表达式语法
在 Python 中使用正则表达式时,是将其作为模式字符串使用的。例如,将匹配不是字母的一个字符的正则表达式表示为模式字符串,可以使用下面的代码:
'[^a-zA-Z]'
而如果将匹配以字母 m 开头的单词的正则表达式转换为模式字符串,则不能直接在其两侧添加引号定界符,例如,下面的代码是不正确的。
'\bm\W\*\b'
而是需要将其中的 “\” 进行转义,即在模式字串前加 r 或 R。使用的代码改写为:
r'\bm\W\*\b'
使用re模块实现正则表达式操作
Python 提供了 re 模块,用于实现正则表达式的操作。在实现时,可以使用 re 模块提供的方法(例如,match()
、search()
、findall()
等)进行字符串处理。
匹配字符串
匹配字符串可以使用 re 模块提供的 match()
、search()
、findall()
等方法。例如:
import re # re 模块在使用时,需要先应用 import 语句引入
# match 方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回 match 对象,否则返回 None
pattern = r'mr\_\w+' # 模式字符串
string = 'MR\_SHOP mr\_shop' # 要匹配的字符串
match = re.match(pattern,string,re.I) # 匹配字符串,不区分大小写
print(match)
print('匹配值得起始位置:',match.start())
print('匹配值得结束位置:',match.end())
print('匹配位置的元组:',match.span())
print('要匹配的字符串:',match.string)
print('匹配数据:',match.group())
# search 方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,则返回 match 对象,否则返回 None
match = re.search(pattern,string,re.I)
print(match)
# findall 方法用于在整个字符串中搜索所有符合正则表达式的字符串,并以列表的形式返回。若匹配成功,则返回包含匹配结构的列表,否则返回空列表
match = re.findall(pattern,string,re.I)
print(match)
输出结果为:
<re.Match object; span=(0, 7), match='MR_SHOP'>
匹配值得起始位置: 0
匹配值得结束位置: 7
匹配位置的元组: (0, 7)
要匹配的字符串: MR_SHOP mr_shop
匹配数据: MR_SHOP
<re.Match object; span=(0, 7), match='MR_SHOP'>
['MR_SHOP', 'mr_shop']
替换字符串
使用 re 模块的 sub()
函数可以替换字符串中匹配某个正则表达式模式的部分。例如:
import re
pattern = r'1[34578]\d{9}' # 定义要替换的模式字符串
string = '中奖号码为:86888888 联系电话为 13111111111'
result = re.sub(pattern,'1XXXXXXXXXXX',string)
print(result)
输出结果为:
中奖号码为:86888888 联系电话为 1XXXXXXXXXXX
使用正则表达式分割字符串
split()
方法用于实现根据正则表达式分割字符串,并以列表的形式返回,其作用与字符串对象的 split()
方法类似,所不同的就是分割字符由模式字符串指定。例如:
import re
pattern = r'[>|/]' # 定义分隔符
ur1 = '机 电 研 究 生 >>> blog.csdn.net/a2360051431'
result = re.split(pattern,ur1) # 其作用与字符串对象的 spilt 方法类型,所不同的就是分割字符由模式字符串指定
print(result)
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!