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)
相关推荐
狐狐生风36 分钟前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
狐狐生风1 小时前
LangChain RAG 基础
人工智能·python·学习·langchain·rag·agentai
努力努力再努力FFF3 小时前
医生对AI辅助诊断感兴趣,作为临床人员该怎么了解和学习?
人工智能·学习
sakiko_4 小时前
UIKit学习笔记5-使用UITableView制作聊天页面
笔记·学习·swift·uikit
Alice-YUE5 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
北山有鸟6 小时前
修改源码法和插件法
嵌入式硬件·学习
richxu202510016 小时前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
qeen877 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
lizhihai_997 小时前
股市学习心得-六张分时保命图
大数据·人工智能·学习
nashane8 小时前
HarmonyOS 6学习:应用签名文件丢失处理与更新完全指南
学习·华为·harmonyos·harmonyos 5