网站集群建设价格/链接检测工具

网站集群建设价格,链接检测工具,杭州网站开发wguser,wordpress使用腾讯cos目录 一、正则表达式的基本概念 1、基本概念 2、正则表达式的特殊字符 二、范围符号和量词 1、范围符号 2、匹配汉字 3、量词 三、正则表达式函数 1、使用正则表达式: 2、re.match()函数 3、re.search()函数 4、findall()函数 5、re.finditer()函数 6…

目录

一、正则表达式的基本概念

1、基本概念

2、正则表达式的特殊字符

二、范围符号和量词

1、范围符号

2、匹配汉字

3、量词

三、正则表达式函数

1、使用正则表达式:

2、re.match()函数

3、re.search()函数

4、findall()函数

5、re.finditer()函数

6、迭代器

7、re.sub()函数

四、边界符号

五、分组


在Python的正则表达式中,我们可以用它来判断某个字符串是否符合某种模式,比如判断某个字符串是不是邮箱地址,是不是电话号码等,我们可以利用正则表达式在文本中寻找并抽取符合某种模式或格式

一、正则表达式的基本概念

1、基本概念

正则表达式是一个某些字符拥有一些特殊含义字符串

下面我们介绍几个有特殊含义的功能字符:

字符组合匹配模式
.除了\n外的任意一个字符,包括汉字(多行匹配可能也包含\n)
*量词,表示其左边的字符可出现0次或任意多次(包括一次)
量词,表示其左边的字符必须出现一次或0次
+量词,表示其左边的字符必须出现一次或更多次
{ m }量词,m是整数,表示其左边的字符必须且只能出现m次
{ m,n }量词,m和n都是整数,表示左边的字符至少出现m次,至多n次(n也可以不写,表示没有上限
\d一个数字字符,等价于[0 , 9]
\D一个非数字字符,等价于[^\d] , [^0 , 9]
\s一个空白字符,如空格,\t , \r , \n
\S一个非空白字符
\w一个单词字符,包括汉字或大小写的英文字母,数字,下划线,或其他语言的
\W一个非单词符
|A | B,表示能匹配A或能匹配B均算能匹配

(注:上述这些组合是两个独立的字符,单纯的在字符串里面输出的话无效果,需结合相关的正则表达式函数!)

2、正则表达式的特殊字符

我们在正则表达式中常见的特殊字符有以下几个

.  +  ?  *  $  [  ]  (  )  ^  {  }  \  

如果要在正则表达式中使用上述这些字符本身,我们在前面加上\符号

(注:和刚刚上面一样,这些特殊字符加\符号只是两个独立的字符,本身无特殊含义,如果只是在字符串中输出,无效果,需结合正则表达式使用

二、范围符号和量词

1、范围符号

在正则表达式中我们的范围符号用[]来表达,这个符号的意思是此处必须出现一个中括号内的所指定的范围的字符

相关用法:

例子用法含义
[abc]此处需匹配a,b,c中的一个字符
[a-zA-Z]匹配任意英文字母
[\da-z\$]匹配一个数字或任意一个小写字母,或字符$
[^abc]匹配一个字符,但不能是abc中的一个
[^a-k5-9]

匹配一个字符,但不能是a到k中的一个,或者不能是5

到9中的一个

2、匹配汉字

汉字的Unicode编码范围是 4e00 - 9fa5 (16进制)因此[4e00 - 9fa5]就是表示一个汉字

3、量词

量词的使用十分灵活,我们可以把量词和上面提到的特殊字符结合起来,达到更加细致的匹配条件:

比如,我们可以把 . 和 + 结合起来,“ . ”代表任意字符(除了\n),而+表示出现或多次(出现的字符不见得需要一样),结合起来就代表着匹配任意长度不为0且不包含\n的字符串

我们还可以在前面加上负号,来表示数字的范围:

正整数:[1-9]\d*(数字的最前面不能是0,所以先规定1-9,然后的\d是一个0-9的数字,再加一个*就是说这个\d可以出现0次或多次)

负整数:-[1-9]\d*(前面加一个负号即可)

整数:-?[1-9]\d* | 0(?表示可能出现一次或0次,涵盖了正负整数,再用|符号加一个0,就是全部整数)

三、正则表达式函数

1、使用正则表达式:

我们如果想要使用正则表达式,需要先调用re包

import re

2、re.match()函数

re.match()函数的格式:

re.match(pattern , string , flags = 0)

①从字符串string的起始位置匹配对应的正则表达式pattern

②flags是标志位,用于控制模式串的匹配方式,比如,是否区分大小写,多行匹配等,例子:re.M | re.I就是忽略大小写,且多行匹配

③成功就返回一个匹配对象,否则返回None

下面我们来看一个例子:

import redef match(pattern , string) :x = re.match(pattern , string)if x != None :print(x.group())    #group()是返回匹配到的字符串else :print(None)match("scy" , "scymimimi")  #符合要求match("scy" , "mimiscymimi")    #虽然包含scy,但是不是在开头match(".{3}scy" , "miscyabdc")  #要求scy的左边必须包含三个字符,但是string中只有两个

输出:

3、re.search()函数

re.search()函数的格式:

re.search(pattern , string , flags = 0)

①查找字符串中,可以匹配成功的子串

②成功就返回一个匹配对象,否则返回None

我们把上面的代码稍加修改:

import redef matchtwo(pattern , string) :x = re.search(pattern , string)if x != None :print(x.group())    #group()是返回匹配到的字符串else :print(None)matchtwo("scy" , "scymimimi")  #符合要求matchtwo("scy" , "mimiscymimi")    #只要能在后面的string中找到符合规则的即可matchtwo(".{3}scy" , "miscyabdc")  #要求scy的左边必须包含三个字符,但是string中只有两个,虽然能找到scy这个子串,但是不符合其他的条件

结果:

因为这是在整个字符串中找到符合要求的子串,如果我们的string十分的长,我们可以添加一个函数来使得查找更方便:x.span()

润色后的代码(只包含函数部分):

def matchtwo(pattern , string) :x = re.search(pattern , string)if x != None :print(x.group() , x.span())    #group()是返回匹配到的字符串   x.span()是输出其子串的起止位置else :print(None)

结果:

4、findall()函数

在前面两个函数中,无论是哪一个函数,都是只找了第一个符合目标的子串,就返回了结果,如果我们想要找到全部符合要求的子串,就可以使用findall()函数:

re.findall()函数的格式:

re.findall(pattern , string , flags = 0)

对其目标字符串string中的所有和模式匹配的子串,不重叠的放入一个列表,一个子串都找不到就返回空列表[]

import redef findall(pattern , string) :x = re.findall(pattern , string)print(x)findall("scy" , "abcd")findall("scy" , "scy")findall("scy" , "abcscy")findall("scy" , "abcscydefscy")findall("scy.{2}scy" , "scyascyscyabscybbdkkjscy8yscy")

5、re.finditer()函数

re.finditer()函数的格式:

re.finditer(pattern , string , flags = 0)

查找字符串中每个符合匹配对象的子串(不重叠),每个子串对应一个匹配对象,返回匹配对象的序列(可调用迭代器)

(迭代器:迭代器是一个根据具体参数来进行抽象操作的行为,比如我们我一篮子水果,我们想把每个水果拿出来检查以下,而迭代器就相当于水果分发器,把水果取出来,交给你)

例子:

import rea = "scy.{2}scy"b = "scyascyscyabscybbdkkjscy8yscy"for i in re.finditer(a , b) :print(i.group() , i.span())

输出:

(如果发现没有符合要求的子串,就无输出)

6、迭代器

关于迭代器,迭代器是没有group和span函数的,所以我们如果直接把finditer函数返回的东西和group函数结合使用是会报错的!

下面是一个错误的例子:

import rea = "scy.{2}scy"b = "scyascyscyabscybbdkkjscy8yscy"c = re.finditer(a , b)
print(c.group() , c.span())

这个代码会报错,因为代码中的c,是指finditer函数返回的迭代器本身,无法使用group函数,而上面正确的例子中那个i,因为在循环之中,每次循环i都会指向迭代器内一个新的且符合要求的匹配对象,对象中包含子串的一些信息!

我们上面那个正确的例子稍加修改:

import rea = "scy.{2}scy"b = "scyascyscyabscybbdkkjscy8yscy"for i in re.finditer(a , b) :print(i)

结果:

这个代码就是生成迭代器中每个符合要求的匹配对象,然后里面包含子串及相关信息

这些符合要求的匹配对象的集合,把他放到一个容器中,就是迭代器!

7、re.sub()函数

re.sub()函数用于把目标子串替换成我们所要替换的内容:

基本格式:

re.sub(模式串,替换串,母串)

例子:

import restr = "adhba8bkwjciehwajbjhsduagbshuchaobcsdjk"
a = re.sub("a.b" , "00000" , str)
print(a)

输出:

四、边界符号

边界符号用于指定字符的位置

我们下面会介绍几个边界符号:
 

边界符号作用
\A表示字符串的左边界,及要求从此处往左不能有任何字符
\Z表示字符串的右边界,及要求从此处往右不能有任何字符
^与\A同,但多行匹配下还可以表示一行文字的左边界
$与\Z同,但多行匹配下还可以表示一行文字的右边界
\b表示此处是单词的左边界或右边界,即不可是单词字符
\B表示此处不能是单词的左边界或右边界,即必须是单词字符

边界字符和上面那些范围符号一样,都只是一个或两个单独的字符不是和\n一样是一个字符

五、分组

分组是正则表达式中很重要的一个概念,我们在Python的正则表达式中会用()来表达,一个括号的表达式是一个分组,多个分组按左括号,从左到右的顺序从1开始编号

例子:

import rezs = "(((abc*)d)e)"
str = "abcdefgh"
a = re.match(zs , str)
print(a.group())
print(a.group(0))    #group(0)等价于group()
print(a.group(1))
print(a.group(2))
print(a.group(3))
print(a.groups())

输出:

我们可以在分组的右面通过分组的编号来引用该分组匹配的字符串:

import rezs = r"(((abc*)d)e)\3"
str = "abcdeabccccfgh"
a = re.match(zs , str)
print(a.group())

这里的\3引用的就是(abc*),而(abc*)在前面得到是abc,所以\3就是abc

结果:

分组作为一个整体,后面可以跟量词

例子:

import rezs = r"(((abc*)+d)e)"
str = "abcabcabcabcdecfgh"
a = re.match(zs , str)
print(a.group())

输出:

(上述这些代码如果没有遇到能匹配的子串,就会报错,建议放到try里面)

以上就是Python正则表达式(一)的全部内容:)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件基础--03_电流

电流 十九世纪初:[电流方向]是指正电荷的移动方向。 后来:对于金属导体,正电荷没移动,其实是电子在移动。 为了定义的统一性[电流方向]仍然定义为正电荷的移动方向 所以:[电流方向]与[电子移动方向]是相反的。 概念:电荷的定向移动,形成了电…

借壹起航东风,中国工厂出海开启新征程

在经济全球化不断深入的当下,中国工厂正以积极的姿态投身海外市场,渴望在全球商业版图中占据一席之地,绽放独特的光彩。然而,出海之路充满了挑战与艰辛,品牌塑造困难重重、询盘量不稳定、营销成本居高不下等问题&#…

在linux系统上卸载并重新安装Docker及配置国内镜像源指

前言 Docker 作为容器化技术的核心工具,广泛应用于开发、测试和部署环境。但在某些情况下(如版本冲突、配置错误等),可能需要彻底卸载并重新安装 Docker。此外,国内用户直接访问 Docker 官方镜像源可能速度较慢&#…

Mysql内置函数篇

🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 7.函数 7.1 日期函数 函数总:​编辑 获得当前日期 获得…

小爱控制OK影视搜索视频

在adb connect ip以后,可以这样打开Ok影视,并且进行控制 pm list packages -3 #只显示第三方 dumpsys package com.fongmi.android.tv |grep Activity #返回 com.fongmi.android.tv/.ui.activity.HomeActivity am start -n com.fongmi.android.tv/.u…

电机倍频曲线的一些奇异特性-原因分析及应用

这里对感应电机倍频曲线的特征进行了说明,然后将其特性用于电机转差率和工况的测量。先给出可以直接利用的结论: 电机的工况和转差率谱线会体现为5x,7x谱线调制在基频附近。两条调制过携带s信息的谱线距离基频谱线的距离。 与真实转速相对同步转速的频差…

语言解码双生花:人类经验与AI算法的镜像之旅

大家好,我是吾鳴。 今天吾鳴要给大家分享一份由浙江大学出品的DeepSeek报告,报告从语言的奥秘,人类是如何通过语言来解码世界,AI又是如何理解人类的语言,同时介绍了当下爆火的DeepSeek-V3和DeepSeek-R1两种大模型的进化…

如何避免测试数据准备不充分或不可复用

避免测试数据准备不充分或不可复用的关键方法包括明确数据需求、统一数据管理工具、建立数据复用机制、定期维护更新测试数据以及加强团队沟通与协作。 其中,统一数据管理工具对确保数据质量和复用性尤为重要。例如,许多团队采用专门的测试数据管理工具以…

汤臣倍健业绩倒车:2024年利润下滑超六成,三大核心品牌销量失守

撰稿|行星 来源|贝多财经 汤臣倍健的2024年,“隐痛”不少。 3月22日,国内膳食营养补充剂供应商汤臣倍健股份有限公司(SZ:300416,下称“汤臣倍健”)公布了2024年年度报告。财报显示,汤臣倍健过去一年出现了…

通信系统的性能指标

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、通信系统的性能指标概述二、数字通信系统的有效性指标三、数字通信系统的可靠性指标总结 前言 一、通信系统的性能指标概述 其中一个提高,另一个…

Linux:(模拟HTTP协议,GET和POST方法,Http的状态码)

目录 一、认识HTTP协议 1.上网的本质 2.应用层的运行逻辑 3.HTTP的概念 二、url 1.认识网址 三、HTTP协议的宏观理解 1.HTTP请求 2.HTTP响应 3.实际的HTTP请求 (1)测试代码 (2)接收HTTP请求 (3&#xff09…

动态规划之完全背包

引言: 完全背包 隶属于动态规划中的背包问题。而 01背包 又是完全背包的基石,所以不懂01背包的,有必要了解一下。 什么是完全背包? 01背包问题:有一个背包承重为V,有N个物品,每个物品的价值(…

金融数据分析(MATLAB)个人学习笔记(5):金融实证分析实例

一、国内外常用金融数据库简介 (一)国外数据库 1. CRSP数据库 CRSP(Center for Research in Security Prices,证券价格研究中心)是美国芝加哥大学商研所金融研究中心的产品。收集的美国股票和指数数据来源主要为纽约证券交易所…

硬件基础(3):三极管(4):关于三极管的压降

文章目录 三极管的压降使用与测量注意事项 三极管的压降 三极管的“压降”通常是指在一定工作状态下,三极管不同电极之间产生的电压差。对于常见的双极性晶体管(BJT)而言,最常讨论的压降通常包括以下几个部分: 基-发射…

[深度学习]图像分类项目-食物分类

图像分类项目-食物分类(监督学习和半监督学习) 文章目录 图像分类项目-食物分类(监督学习和半监督学习)项目介绍数据处理设定随机种子读取文件内容图像增广定义Dataset类 模型定义迁移学习 定义超参Adam和AdamW 训练过程半监督学习定义Dataset类模型定义定义超参训练过程 项目介…

5.go切片和map

切片的概念 数组和切片相比较切片的长度是不固定的,可以追加元素,在追加时可能会使切片的容量增大,所以可以将切片理解成 "动态数组",但是,它不是数组,而是构建在数组基础上的更高级的数据结构。…

云原生算力引擎:分布式推理的流体动力学

引言:算力黑洞的引力扰动 OpenAI推理集群日处理4.5亿次请求,CUDA 12.3实现μs级张量切换。特斯拉Dojo超算芯片间延迟0.5ns,阿里巴巴PAI平台节省58%训练时长。HuggingFace模型库下载量突破3亿次,AWS Inferentia芯片能效比提升8倍。…

Cesium 自定义路径导航材质

cesium 自定义路径导航纹理图片随便更换,UI 提供设计图片即可达到效果; 打开小马的weix 关注下 搜索“技术链” 回复关键词《《路径》》获取原始代码; 拿到就能用轻松解决!帮忙点个关注吧!

3月25号

添加图片的一些例子: // 创建一个二维数组,用来管理数据int[][] data new int[4][4]; // 记录空白方块的位置int x0;int y0; // 定义一个变量,记录当前展示图片的路径String path"E:\\java\\jigsawgame\\路飞\\路飞"; // 加载图片细节: // …

【机器学习】什么是支持向量机?

什么是支持向量机? 支持向量机(SVM,Support Vector Machine)是一种强大的机器学习算法,常用于分类问题,也可以用于回归问题。它的核心思想是通过找到一个最佳的“超平面”来将不同类别的数据分开&#xff…