Python学习从0到1 day29 Python 高阶技巧 ⑦ 正则表达式

目录

一、正则表达式

二、正则表达式的三个基础方法

[1.match 从头匹配](#1.match 从头匹配)

2.search(匹配规则,被匹配字符串)

3.findall(匹配规则,被匹配字符串)

三、元字符匹配

单字符匹配:

注:

示例:

找出特殊字符

找出全部的英文字母

找出单词字符

数量匹配:

边界匹配

分组匹配

案例

注:


我们终将上岸,阳光万里

------ 24.11.15

一、正则表达式

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。

简单来说,正则表达式就是使用:字符串定义规则,并通过规则去验证字符串是否匹配

比如,验证一个字符串是否是符合条件的电子邮箱地址,只需要配置好正则规则,即可匹配任意邮箱。比如通过正则规则:(^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$),即可匹配一个字符串是否是标准邮箱格式

但如果不使用正则,使用if else来对字符串做判断就非常困难了:


二、正则表达式的三个基础方法

Python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配。

分别是:match、search、findall三个基础方法

re.match(匹配规则,被匹配字符,串)

从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空

1.match 从头匹配

python 复制代码
import re

s = "一切都会好的"

# match 从头匹配
res1 = re.match("一切", s)
print(res1)

2.search(匹配规则,被匹配字符串)

搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后

python 复制代码
import re

s = "一切都会好的"

# search 从头到尾进行搜索
res2 = re.search("都会好", s)
print(res2)

3.findall(匹配规则,被匹配字符串)

匹配整个字符串,找出全部匹配项

找不到返回空list:[]

python 复制代码
import re

# findall 找出全部匹配项
s = "一切都会好的,我一直相信"
res3 = re.findall("一", s)
print(res3)

三、元字符匹配

在刚刚我们只是进行了基础的字符串匹配,正则最强大的功能在于元字符匹配规则。

单字符匹配:

注:

字符串前面带上r的标记,表示字符串中转义字符无效,就是普通字符的意思

示例:

字符串 s = "一切都会好的_021104_我一直相信_YYSHlcl"

找出特殊字符

python 复制代码
import re

s = "一切都会好的_@021104_我一直相信_@YYSHlcl"

res1 = re.findall("\W",s)
print(res1)

找出全部的英文字母

python 复制代码
import re

s = "一切都会好的_@021104_我一直相信_@YYSHlcl"

# 字符串前面带上r的标记,表示字符串中转义字符无效,就是普通字符的意思
# 找出所有英文字符
res2 = re.findall(r"[a-zA-Z]",s)
print(res2)

找出单词字符

python 复制代码
import re

s = "一切都会好的_@021104_我一直相信_@YYSHlcl"

# 字符串前面带上r的标记,表示字符串中转义字符无效,就是普通字符的意思
# 找出所有的单词字符
res3 = re.findall(r"\w",s)
print(res3)

数量匹配:


边界匹配


分组匹配


案例

匹配账号,只能由字母和数字组成,长度限制6到10位

规则为:^[0-9a-zA-Z]{6,10}$

匹配QQ号,要求纯数字,长度5-11,第一位不为0

规则为:^[1-9][0-9]{4,10}&

1-9\]匹配第一位,\[0-9\]匹配后面4到10位 匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址 规则为:\^\[\\w-\]+(\\.\[\\w-\]+)\*@(qq\|163\|gmail)(\\.\[\\w-\]+)+\&

注:

字符串的 r 标记表示,字符串内转义字符无效,作为普通字符使用

python 复制代码
import re
# 匹配账号,只能由字母和数字组成,长度限制6到10位
# 规则为:^[0-9a-zA-Z]{6,10}$
res1 = re.findall(r"^[0-9a-zA-Z]{6,10}$","954926928lcl")
print("res1:", res1)

res2 = re.findall(r"^[0-9a-zA-Z]{6,10}$","954926928")
print("res2:", res2)

# 匹配00号,要求纯数字,长度5-11,第一位不为0
# 规则为:^[1-9][0-9]{4,10}&
# [1-9]匹配第一位,[0-9]匹配后面4到10位
res3 = re.findall(r"^[1-9][0-9]{4,10}$","2952234004")
print("res3:", res3)

# 匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址
# 规则为:^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+&
res4 = re.findall(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","lcl@163.com")
print("res4:", res4)

res5 = re.findall(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","2952234004@qq.com")
print("res5:", res5)

res6 = re.findall(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","1144099341@gmail.com")
print("res6:", res6)

# 正则表达式中若有括号分组,则需要在正则表达式中加括号使正则表达式整体变为一个组
# match方法可以只输出完整的组
res7 = re.match(r"(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)","1144099341@gmail.com")
print("res7:",res7)
相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习
im_AMBER4 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J4 天前
从“Hello World“ 开始 C++
c语言·c++·学习