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)
相关推荐
埋头编程~42 分钟前
【C++】踏上C++的学习之旅(六):深入“类和对象“世界,掌握编程的黄金法则(一)
开发语言·c++·学习
非概念44 分钟前
STM32学习笔记-----UART的概念
笔记·stm32·单片机·嵌入式硬件·学习
mirevass1 小时前
【嵌入式软件-STM32】OLED显示屏+调试方法
stm32·单片机·嵌入式硬件·学习·keil
GOSIM 全球开源创新汇2 小时前
对话 OpenCV 之父 Gary Bradski:灾难性遗忘和持续学习是尚未解决的两大挑战 | Open AGI Forum
opencv·学习·计算机视觉·ai·自动驾驶
努力成为DBA的小王3 小时前
Linux( 权限+特殊权限 图片+大白话)
linux·运维·服务器·学习
YAy174 小时前
CC3学习记录
java·开发语言·学习·网络安全·安全威胁分析
懒惰的cv怪5 小时前
Redis学习 ——缓存
redis·学习·缓存
心怀梦想的咸鱼6 小时前
UE5 umg学习(四) 将UI控件显示到关卡中
学习·ui·ue5
lx学习8 小时前
Python学习26天
开发语言·python·学习