阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

正则表达式

402次阅读
没有评论

共计 4331 个字符,预计需要花费 11 分钟才能阅读完成。

一、正则基础

1、为什么使用正则

  • 需求

    判断一个字符串是否是手机号

  • 解决

    编写一个函数,给函数一个字符串,如果是手机号则返回 True,否则返回 False

  • 代码

    def isPhone(phone): # 长度为 11 # 全部都是数字字符 # 以 1 开头 pass if isPhone("13812345678"): print("是手机号") else: print("不是手机号")
  • 注意

    如果使用正则会让这个问题变得简单

2、re 模块简介

python 自 1.5 版本开始增加了 re 模块,该模块提供了 perl 风格的正则表达式模式,re 模块是 python 语言拥有了所有正则表达式的功能

  • 如下四个方法经常使用
    • match()
    • search()
    • findall()
    • finditer()

二、re 模块中常用函数

1、match()函数

  • 原型

    def match(pattern, string, flags=0)
    
  • 功能

    尝试从字符串 string 的起始位置匹配一个 pattern 模式,如果不在起始位置匹配成功的话就返回 None

  • 参数

    参数 说明
    pattern 匹配的正则表达式(一种字符串的模式)
    string 要匹配的字符串
    flags 标识位,用于控制正则表达式的匹配方式
  • flags

    说明
    re.I 是匹配对大小写不敏感
    re.L 做本地化识别匹配
    re.M 多行匹配,影响到 ^ 和 $
    re.S 使. 匹配包括换行符在内的所有字符
    re.U 根据 Unicode 字符集解析字符,影响 \w、\W、\b、\B
    re.X 通过给予我们功能灵活的格式以便更好的理解正则表达式
  • 代码

    import re ret = re.match("www","www.zutuanxue_com.wang") print(ret, type(ret), ret.span()) print(re.match("www","wwW.zutuanxue_com.www.wang", re.I)) print(re.match("www","zutuanxue_com.www.wang")) print(re.match("www","zutuanxue_com.wang"))

2、searce()函数

  • 原型

    def search(pattern, string, flags=0)
    
  • 功能

    扫描整个字符串 string,并返回第一个 pattern 模式成功的匹配

  • 参数

    参数 说明
    pattern 匹配的正则表达式(一种字符串的模式)
    string 要匹配的字符串
    flags 标识位,用于控制正则表达式的匹配方式
  • flags

    说明
    re.I 是匹配对大小写不敏感
    re.L 做本地化识别匹配
    re.M 多行匹配,影响到 ^ 和 $
    re.S 使. 匹配包括换行符在内的所有字符
    re.U 根据 Unicode 字符集解析字符,影响 \w、\W、\b、\B
    re.X 通过给予我们功能灵活的格式以便更好的理解正则表达式
  • 代码

    import re ret = re.search("www", "zutuanxue_com.www.wang.www") print(ret, type(ret), ret.span())

3、findall()函数

  • 原型

    def findall(pattern, string, flags=0)
    
  • 功能

    扫描整个字符串 string,并返回所有匹配的 pattern 模式结果的字符串列表

  • 参数

    参数 说明
    pattern 匹配的正则表达式(一种字符串的模式)
    string 要匹配的字符串
    flags 标识位,用于控制正则表达式的匹配方式
  • flags

    说明
    re.I 是匹配对大小写不敏感
    re.L 做本地化识别匹配
    re.M 多行匹配,影响到 ^ 和 $
    re.S 使. 匹配包括换行符在内的所有字符
    re.U 根据 Unicode 字符集解析字符,影响 \w、\W、\b、\B
    re.X 通过给予我们功能灵活的格式以便更好的理解正则表达式
  • 代码

    import re ret = re.findall("www", "zutuanxue_com.www.wang.wwwqqww1fffwwe") print(ret, type(ret)) # ww1 ww2 ww3 ww4 wwa wwb wwc ww@ print(re.findall("", "zutuanxue_com.www.wang.wwwqqww1fffwwe"))

4、finditer()函数

  • 原型

    def finditer(pattern, string, flags=0)
    
  • 功能

    与 findall()类似,返回一个迭代器

  • 参数

    参数 说明
    pattern 匹配的正则表达式(一种字符串的模式)
    string 要匹配的字符串
    flags 标识位,用于控制正则表达式的匹配方式
  • flags

    说明
    re.I 是匹配对大小写不敏感
    re.L 做本地化识别匹配
    re.M 多行匹配,影响到 ^ 和 $
    re.S 使. 匹配包括换行符在内的所有字符
    re.U 根据 Unicode 字符集解析字符,影响 \w、\W、\b、\B
    re.X 通过给予我们功能灵活的格式以便更好的理解正则表达式
  • 代码

    import re ret = re.finditer("www", "zutuanxue_com.www.wang.wwwqqww1fffwwe") print(ret, type(ret)) for x in ret: print(x, type(x), x.span())

三、正则表达式元字符

1、匹配单个字符与数字

匹配 说明
. 匹配除换行符以外的任意字符,当 flags 被设置为 re.S 时,可以匹配包含换行符以内的所有字符,如果没有设置并且还匹配所有字符需要[.\n]
[] 里面是字符集合,匹配 [] 里任意一个字符
[0123456789] 匹配任意一个数字字符
[0-9] 匹配任意一个数字字符
[a-z] 匹配任意一个小写英文字母字符
[A-Z] 匹配任意一个大写英文字母字符
[A-Za-z] 匹配任意一个英文字母字符
[A-Za-z0-9] 匹配任意一个数字或英文字母字符
[^zutuanxue_com] []里的 ^ 称为脱字符,表示非,匹配不在 [] 内的任意一个字符
\d 匹配任意一个数字字符,相当于[0-9]
\D 匹配任意一个非数字字符,相当于[^0-9]
\w 匹配字母、下划线、数字中的任意一个字符,相当于[0-9A-Za-z_]
\W 匹配非字母、下划线、数字中的任意一个字符,相当于[^0-9A-Za-z_]
\s 匹配空白符(空格、换页、换行、回车、制表),相当于[\f\n\r\t]
\S 匹配非空白符(空格、换页、换行、回车、制表),相当于[^ \f\n\r\t]
impor re print(re.findall(r"ww\d", "zutuanxue_com.www.wang.wwwqqww1fww\nffwweeeww3")) print(re.findall(r"ww.", "zutuanxue_com.www.wang.wwwqqww1fww\nffwwe", re.S))

2、匹配锚字符

匹配 说明
^ 行首匹配,和 [] 里的 ^ 不是一个意思
$ 行尾匹配
import re print(re.search(r"^zutuanxue_com","zutuanxue_com is a good man")) print(re.search(r"^zutuanxue_com","a zutuanxue_com is a good man")) print(re.search(r"man$","zutuanxue_com is a good man")) print(re.search(r"^man$","man")) s = '''zutuanxue_com is a good man zutuanxue_com is a nice man zutuanxue_com is a cool man kaige is a good man zutuanxue_com is a handsome man ''' print("-----------------------") ret = re.finditer(r"^zutuanxue_com", s, re.M) for x in ret: print(x)

3、匹配边界字符

匹配 说明
\A 匹配字符串的开始,和 ^ 的区别是 \A 只匹配整个字符串的开头,即使在 re.M 模式下也不会匹配其他行的行首
\Z 匹配字符串的结尾,和 $ 的区别是 \Z 只匹配整个字符串的结尾,即使在 re.M 模式下也不会匹配其他行的行尾
\b 匹配一个单词的边界,指单词和空格的位置
\B 匹配非单词边界
import re print(re.findall(r"\Azutuanxue_com", s, re.M)) print(re.findall(r"ck\b", "zutuanxue_com is a good man! ack is a nice mack,nckab")) ret = re.finditer(r"ck\B", "zutuanxue_com is a good man! ack is a nice manckab") for x in ret: print(x)

4、匹配多个字符

说明:以下使用 x、y、z 均为假设的普通字符,m、n 表示一个数字,不是正则表达式的元字符

匹配 说明
(xyz) 匹配括号内的 xyz,作为一个整体去匹配
x? 匹配 0 个或者 1 个 x,非贪婪匹配
x* 匹配 0 个或任意多个 x
x+ 匹配至少一个 x
x{n} 确定匹配 n 个 x,n 是非负数
x{n,} 至少匹配 n 个 x
x{n,m} 匹配至少 n 个最多 m 个 x
x|y | 表示或的意思,匹配 x 或 y
import re print(re.findall(r"(very)", "zutuanxue_com is a very very good man")) print(re.findall(r"a?", "11111a2222aa3333aaa44444aaaa55555")) print(re.findall(r"a*", "11111a2222aa3333aaa44444aaaa55555")) print(re.findall(r"a+", "11111a2222aa3333aaa44444aaaa55555")) print(re.findall(r"a{2}", "11111a2222aa3333aaa44444aaaa55555")) print(re.findall(r"a{3,}", "11111a2222aa3333aaa44444aaaa55555")) print(re.findall(r"a{3,5}", "11111a2222aa3333aaa44444aaaa55555aaaaa666aaaaaa")) print(re.findall(r"((s|S)unck)", "zutuanxue_com is a good manzutuanxue_com")) print(re.findall(r"(zutuanxue_com|zutuanxue_com)", "zutuanxue_com is a good manzutuanxue_com"))

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-05-26发表,共计4331字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7799150
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
使用1Panel面板搭建属于你的AI项目环境

使用1Panel面板搭建属于你的AI项目环境

使用 1Panel 面板搭建属于你的 AI 项目环境 在 AI 项目越来越火的今天,很多朋友都想自己动手搭建一...
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...