Python---正则表达式

2023-11-15

专栏:python
个人主页:HaiFan.
专栏简介:Python在学,希望能够得到各位的支持!!!

前言

在这里插入图片描述

概念

正则表达式是对字符串(包括普通字符(如a到z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符,及其这些特定字符的组合,组成一个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述搜索文本时要匹配一个或多个字符串

正则表达式又称正规表达式,正规表示法,规则表达式,常规表达式,(英语:Regular Expression,在代码中简写为regex,regexp或RE),是计算机科学的一概念,正则表达式使用单个字符串来描述,匹配一系列匹配某个句法规则的字符串,在很多文本编辑器里,正则表达式通常被用来检索,替换那些匹配的某个模式的文本。
来源百度百科

作用和特点

给定一个正则表达式和另一个字符串,我们可以达到如下目的

  1. 给定字符串是否符合正则表达式的过滤逻辑(匹配)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分

使用场景

如何判断一个字符串是手机号?
判断邮箱为163或者123的所有合法邮箱地址

正则符号

\A:表示从字符串的开始处匹配
\Z:表示从字符串的结束处匹配,如果存在执行,只匹配到换行前的结束字符串
\b:匹配一个单词边界,也就是说指单词和空格间的位置。
\B:匹配非单词边界。
\d:匹配任意数字,等价于---[0-9]
\D:匹配任意非数字字符,等价于---[^\d]
\s:匹配任意空白字符,等价于---[\t\n\r\f]
\S:匹配任意非空白字符,等价于---[^\s]
\w:匹配任意字母数字及下划线,等价于---[a-zA-Z0-9]
\W:匹配任意非字母数字及下划线,等价于---[^\w]
\\:匹配原义的反斜杠\
---------------------------------------
[]:用于表示一组字符,如果^事第一个字符,则表示的是一个补集,比如[0-9]表示所有的数字,[^0-9]表示除了数字外的字符
.:用于匹配除换行符之外的所有字符
^:用于匹配字符串的开始.及行首
$:用于匹配字符串的末尾(末尾如果有换行符,就匹配换行符前面的那个字符),及行尾
*:用于将前面的模式匹配0次或多次(贪婪模式,及尽可能多的匹配)
+:用于将前面的模式匹配1次或多次(贪婪模式)
?:用于将前面的模式匹配0次或1(贪婪模式)
*?,+?,??是上面三种特殊字符的非贪婪模式(尽可能少的匹配)
{m}:用于验证将前面的模式匹配m次
{m,}:用于验证将前面的模式匹配m次或者多次---> >= m次
{m,n}:用于将前面的模式匹配m次到n次(贪婪模式),即最小匹配m次,最大匹配n次
{m,n}?即上面{m,n}的非贪婪模式
\\:\是转义字符,在特殊字符前面加上\,特殊字符就失去了其所代表的含义,比如\+就仅仅代表加号本身
|:比如A|B用于匹配A或B

re模块

在Python中,使用正则表达式要导入 re模块

import re

re.compile()

complie函数用于编译正则表达式,生成一个正则表达式(Pattern)对像,供match()和search()这两个函数使用
在这里插入图片描述

如何使用:re.compile(pattern,flags)
这个pattern就是一个字符串形式的正则表达式,flags可选,意思是匹配模式,比如:忽略大小写等


import re
msg = '123456'
ret = re.compile('345')
a = ret.search(msg)
print(a)

在这里插入图片描述
这个search是什么,暂时不要关心,后面会说。
通过re.compile('345)可以返回一个正则对象,在这里用的ret来接收,然后通过ret.就可以调用一系列的方法,如match,search等等。当然re模块也提供了与这些方法功能一样的函数,这些函数的第一个参数是模式串。
在这里插入图片描述

match()

在这里插入图片描述

re.match是从字符串的起始位置开始匹配,若没有匹配成功,则返回none。匹配成功则返回第一个匹配的对象

# 语法:
re.match(pattern, string, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数flags:匹配方式,如:字母大小写的区分等

import re

msg = '123456'

a = re.match('345',msg)
b = re.match('123',msg)

print(a)
print(b)

在这里插入图片描述

search()

在这里插入图片描述
从头至尾的扫描字符串,若有匹配的则返回第一次匹配的对象,若没有发现的话,就但会None

# 语法
re.search(pattern, string, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数flags:匹配方式,如:字母大小写的区分等

import re

msg = '123456'

a = re.search('345',msg)
b = re.search('456',msg)
c = re.search('123',msg)
d = re.search('245',msg)

print(a)
print(b)
print(c)
print(d)

在这里插入图片描述

span()

在match或者search匹配成功后,返回第一个成功匹配的位置,通过span可以只显示匹配成功的位置。

import re

msg = '123456'

a = re.search('345',msg)

print(a.span())

在这里插入图片描述

findall()

在这里插入图片描述
在字符串中找到锁匹配的所有字串,返回一个列表,没有找到能够匹配的,则返回一个空列表。

# 语法
re.findall(pattern, string, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数flags:匹配方式,如:字母大小写的区分等

import re

msg = 'AS4DFJ352a3k43jkjv24k4vj234vj234j234jkjv2j4v'

a = re.findall('[a-z][0-9][a-z]',msg)
# [a-z]表示a到z的所有字母
# [0-9]表示9个数字
print(a)

在这里插入图片描述

group()

import re

msg = '111-12345678'

ret = re.match(r'(\d{3}|d{4})-(\d{8})$',msg)
# \d表示匹配任意数字,{3}表示将前面的模式串匹配3次
# $:用于匹配字符串的末尾(末尾如果有换行符,就匹配换行符前面的那个字符),及行尾
print(ret)
print(ret.group(1))
print(ret.group(2))

括号表示分组,group(1)表示第一组内容,group(2)表示第二组内容
在这里插入图片描述

sub()

在这里插入图片描述
正则表达式可以将所有匹配的字符串用不同的字符串进行替换,sub方法提供一个替换值,可以是字符串或者函数,和一个要被处理的字符串。

第一个参数pattern:匹配的正则表达式
第二个参数repl:要替换的内容
第三个参数string:要匹配的
第四个参数count:这是一个可选参数,意思是最大替换次数
第五个参数flags:匹配方式,如:字母大小写的区分等

import re


msg = '465423adfs564'

ret = re.sub(r'\d+','90',msg)

print(ret)

在这里插入图片描述


import re

def add(temp):
    num = temp.group()
    num = int(num)
    num += 1
    return str(num)

ret = re.sub(r'\d+',add,'py:100,java:200')

print(ret)

在这里插入图片描述
通过\d+可以找到100和200这个字符串,然后进入add函数,执行temp.group(),第一次执行会把100拿出来给num,第二次会把200拿出来。

split()

在这里插入图片描述
这个方法是用于惊醒字符串的分割,将分割之后的内容保存在列表中。

#语法
re.split(pattern, string, maxsplit=0, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数maxsplit:分割次数
第四个参数flags:匹配方式,如:字母大小写的区分等

import re

msg = '234jhjk34jkjh3kjhjkh3kjhk3'

ret = re.split(r'[3]',msg)

print(ret)

在这里插入图片描述

import re

msg = '234jhjk34jkjh3kjhjkh3kjhk3'

ret = re.split(r'[3]',msg,maxsplit=0)
ret1 = re.split(r'[3]',msg,maxsplit=1)


print(ret)
print(ret1)

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python---正则表达式 的相关文章

随机推荐

  • 三菱MR-JE-C伺服电机FB功能块 流水线项目,16个MR-JE-C电机

    三菱MR JE C伺服电机FB功能块 适用Q系列PLC 流水线项目 16个MR JE C电机 为了加快编程速度 特意做的一个FB功能块 内部采用局部变量 全局缓冲区的方式进行编程 多次调用不冲突 适用于Q系列PLC和MR JE C的运动控制
  • 模块基础知识总结

    文章目录 1 模块 2 模块的创建 模块的使用 1 模块 模块化指将一个完整的程序分解成一个个的小模块 通过将模块组合 来搭建出一个完整的程序 模块化的有点 方便开发 方便维护 模块可以复用 2 模块的创建 在Python当中一个py文件就
  • spring boot中修改默认json转换器的部分特性,以及如何替换默认json转换器

    用Spring boot构建微服务时 后台接收controller通常用 RestController注解 Restcontroller是 Controller和 ResponseBody的结合体 会将后台返回的Java对象转换为Json字
  • Linux面试题

    1 解释下什么是GPL GNU 自由软件 GPL 通用公共许可证 一种授权 任何人有权取得 修改 重新发布自由软件的权力 GNU 革奴计划 目标是创建一套完全自由 开放的的操作系统 自由软件 是一种可以不受限制地自由使用 复制 研究 修改和
  • matlab elmtrain,ELM代码matlab

    Elmtrain m 训练代码 function IW B LW TF TYPE elmtrain P T N TF TYPE ELMTRAIN Create and Train a Extreme Learning Machine Syn
  • 电脑如何快速截屏技巧 四种常见的电脑截图方法

    经常使用电脑的朋友肯定会经常用到截屏这一功能 那么怎样快速的将电脑桌面上的信息通过截屏保存下来呢 其实截屏的方法有很多种 小编在这里与大家一起分享下四种常见的电脑截图方法 一 Windows系统自带的截图工具 一般的Windows系统都自带
  • git初识

    目录 简介 基本操作 常用命令 简介 Git是一种分布式版本控制系统 用于跟踪文件的更改并协调多个人之间的工作 它最初由Linus Torvalds于2005年创建 现在已成为许多开源和商业项目的首选版本控制系统 Git的主要特点包括分支和
  • Bringing HLSL Ray Tracing to Vulkan

    This post was revised March 2020 to reflect newly added support in DXC for targeting the SPV KHR ray tracing multi vendo
  • Mybatis的逆向工程详解

    今天用mybatis的逆向工程生成mapper xml文件的时候 由于用到的第三方可视化数据库工具的不支持 里面生成的xml文件中缺少了对主键的操作 于是上网查了别人的工程 对照了一下自己把mapper xml补齐了 下面贴出网上别人写得好
  • Transport Client 与 Node Client 官网谈差别

    通过使用elasticsearch 5 x版本 由于是追着潮流 所以遇到了很多疑惑和坑 接下来我们来看一下我一开始用5 x出现两个client 时关于两者区别的疑惑 Transport Client 与 Node Client 如果你使用的
  • 单列集合系列之Set集合的初了解

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于单列集合的相关操作吧 目录 Welcome Huihui s Code World 顶级接口Collection 概念 方法 共性通用 一 Set集合的特点
  • [附源码]JSP+ssm计算机毕业设计彩虹社区残障人士管理信息系统的设计与实现ed5nd【源码、数据库、LW、部署】

    项目运行 项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEcl
  • Vue源码之AST抽象语法树

    Vue源码之AST抽象语法树 AST抽象语法树全称Abstract Sybtax Tree 简称就是AST 其作用就是Vue在解析模板时 会把模板编译成抽象语法树 在进行diff最小量更新算法等 AST抽象语法树是Vue渲染引擎的第一道工序
  • 写给小白的android 事件分发机制

    介绍 当我们手指在屏幕上进行操作时 系统根据我们的操作进行反应 系统为了更好的记录我们的操作 将我们的手指的所有操作分为三类操作 统一封装在MotionEvent类中 把大象装进冰箱只要三部 1 打开冰箱 2 把大象扔进去 3 关闭冰箱 操
  • Windows7之天镜漏洞扫描工具安装

    01 天镜漏洞扫描工具安装 01 安装天镜 02 升级漏洞 03 重启win7 多次重复升级过程 1次可能没办法成功 04 成功之后查看版本
  • Java8 Stream Lambda sorted()之正序倒序

    下面代码以自然序排序一个list list stream sorted 自然序逆序元素 使用Comparator 提供的reverseOrder 方法 list stream sorted Comparator reverseOrder 使
  • 解决zipfile压缩的文件路径太深,直接调用即可

    import os import zipfile import shutil def zipDir dirpath outdir 把路径中最后一个文件夹的名字取出来作为雅苏报的名字 zip path dirpath split 1 prin
  • unix命令

    一 查看机器上是否还有java线程 ps ef grep java 二 查看和清理机器文件 1 查看机器磁盘总空间以及剩余空间大小 root localhost df h 2 查看当前目录使用的总空间大小 root localhost ho
  • 入职1024天,写于万般困顿之时

    最近攻关一个项目到杭州出差 预计还要十多天才能回去 每天在小黑屋里加班到很晚 外加大领导很凶 双重压力之下累的喘不上来气 猛然发现自己已经入职整整1024天了 照照镜子也没入职前那么意气风发了 今天还是太晚了 明天还要早起 留个档占个位置
  • Python---正则表达式

    专栏 python 个人主页 HaiFan 专栏简介 Python在学 希望能够得到各位的支持 正则表达式 前言 概念 作用和特点 使用场景 正则符号 re模块 re compile match search span findall gr