cpython 标准库_Python re标准库

re模块包含对正则表达式的支持。

一、什么是正则表达式

正则表达式是可以匹配文本片段的模式。最简单的正则表达是就是普通字符串,可以匹配其自身。你可以用这种匹配行为搜索文本中的模式,或者用计算后的值替换特定模式,或者将文本进行分段。

1、通配符

点号(.)可以匹配任何字符(除了换行符),但点号只能匹配一个字符,而不是零个或多个;

如.ython可以匹配字符串‘python’或‘jython’,或‘+ython’等等,但是不会匹配‘cpython’或‘ython’;

因为它可以匹配除换行符外的任何单个字符,所以点号就称为通配符。

注:点号是特殊字符,需对它进行转义。可以加上反斜线“cnblogs\\.com”或者使用原始字符串“r'cnblogs\.com'”;

2、字符集

可以使用中括号括住字符串来创建字符集。字符集可以匹配它所包括的任意字符;

如‘[pj]ython’可以匹配python或jython;比如‘[a-z]’可以匹配a到z的任意一个字符;

也可以通过一个接一个的方式将范围联合起来使用,比如‘[a-zA-Z0-9]’可以匹配任意一个小写或大写字母或0到9的数字;

可以在开头使用‘^’反转字符集,匹配除字符集外的其它字符;如‘[^abc]’可以匹配任何除了a\b\c之外的字符。

3、选择符和子模式

管道符号(|)可以用于选择项;如匹配python和perl,可以写成‘python|perl’

当只是模式的一部分进行选择时,可以使用圆括号括起需要的部分,或称为子模式。如匹配python和perl,可以写成‘p(ython|erl)’

4、可选项和重复子模式

在子模式后面加上句号,它就变成了可选项,即表示子模式可以出现一次或者根本不出现。

如r'(http://)?(www\.)?python\.org'只能匹配到下列字符串,而不会匹配其它的:

http://python.org

http://www.python.org

www.python.org

python.org

上述例子,值得注意的是:

(1)对www.和python.org之间的点号进行了转义,防止它被作为通配符使用;

(2)使用原始字符串“r”减少所需反斜线的数量;

(3)每个可选子模式都用圆括号括起;

(4)可选子模式出现与否均可,而且互相独立;

使用下面这些运算符允许子模式重复多次:

(pattern)*:允许模式重复0次或多次;

(pattern)+:允许模式重复1次或多次;

(pattern){m,n}:允许模式重复m~n次;

例如,r'w*\.python\.org'会匹配'www.python.org',也会匹配'.python.org’;

5、字符串的开始和结尾

如果想在字符串的开头而不是其他位置匹配,可以使用脱字符(^)标记开始;

如‘^ht+p’会匹配‘http://python.org’或'htttp://python.org',但不匹配‘www.http.org’;

使用美元符号($)标志字符串结尾。

二、re模块的内容

re模块包含一些有用的操作正则表达式的函数:

函数re.compile将正则表达式(以字符串书写的)转换为模式对象,可以实现更有效率的匹配。如果调用search或者match函数的时候使用字符串表示的正则表达式,它们也会在内部将字符串转换为正则表达式对象。 使用compile完成一次转换后,在每次使用模式的时候就不用进行转换。

函数re.search会在给定字符串中寻找第一个匹配给定正则表达式的子字符串。一旦找到子字符串,函数就会返回MathObject(值为True),否则返回None(值为False)。

函数re.match会在给定字符串的开头匹配正则表达式。如match('p','python')返回真,而re.match('p','www.python')则返回假。

函数re.split会根据模式的匹配项来分隔字符串。参数maxsplit表示字符串最多可以分隔的次数:

importre

text= 'a,b,,,,c d'

##正则表达式中,匹配逗号和空格

listvalue= re.split('[, ]+',text)print(listvalue) #['a', 'b', 'c', 'd']

print(re.split('o(o)','foobar')) #['f', 'o', 'bar']

print(re.split('[, ]+',text,maxsplit=1)) #['a', 'b,,,,c d']

函数re.findall以列表形式返回给定模式的所有匹配项。

pat = '[a-zA-Z]'text2= '"aq," bp,,,,ct rd'

print(re.findall(pat,text2)) #['a', 'q', 'b', 'p', 'c', 't', 'r', 'd']

函数re.sub的作用在于:使用给定的替换内容将匹配模式的子字符串(最左端并且非重叠的子字符串)替换掉。

pat3 = '{name}'text3= 'Dear {name}'

print(re.sub(pat3, 'Jame', text3)) #Dear Jame

函数re.escape可以对字符串中所有可能被解释为正则运算符的字符进行转义。

print(re.escape('www.python.org')) #www\.python\.org

三、匹配对象和组

re模块函数能找到匹配项时,它们会返回MathObject对象,这些对象包括匹配模式的子字符串的信息,它们还包含了哪个模式匹配了子字符串哪部分的信息,这些部分叫做组(group)。

即组就是放置在圆括号内的子模式。组的序号取决于它左侧的括号数。组0就是整个模式。

如在下面的模式中:‘there (was a (wee) (cooper)) who (lived in fyfe)’,包含下面这些组:

0 there was a wee cooper who lived in fyfe

1 was a wee cooper

2 wee

3 cooper

4 lived in fyfe

注:这里要区分前面提到的字符集,字符集两边是用中括号括起的,而组是用原括号括起的。

如r'www\.(.+)\.com$' 可以匹配'www.python.com';组0就是‘www.python.com’,组1就是python。

re匹配对象存在以下重要方法:

上诉方法中,[group1]指的是组号。如果没有给定组号,则默认为组0.

m = re.match(r'www\.(.*)\..{3}', 'www.python.org')print(m.group(1)) #python

print(m.start(1)) #4

print(m.end(1)) #10

print(m.span(1)) #(4, 10)

重复运算符的匹配是贪婪的,即它会尽可能多的匹配。

在重复运算符后面加上一个问号可以变为非贪婪的。

pat4 = r'\*\*(.+?)\*\*'pat5= r'\*\*(.+)\*\*'

print(re.sub(pat4,r'\1','**this** is **it**!')) #this is it!

print(re.sub(pat5,r'\1','**this** is **it**!')) #this** is **it!

这里用+?运算符代替了+,意味着模式也会像之前那样对一个或者多个通配符进行匹配,但是它会进行尽可能少的匹配,因为它是非贪婪的。

让正则表达式变得更加易读的方式是在re函数中使用VERBOSE标志:

em_pat = re.compile(r'''\* #匹配的第一个字符是星号

\* #匹配的第二个字符是星号,这里前面斜杠是转义

( #匹配组左侧圆括号

. #匹配任意字符

+ #任意字符可以是1个或多个

) #匹配组右侧括号

\*\* #匹配的字符后面跟着两个星号''',re.VERBOSE)print(re.sub(em_pat,r'\1','**this** is **it**!')) #this** is **it!

四、实例

文件中存在以下文字:

From foo@bar.baz Thu Dec

Subjec:Re:Span

From:Foo fie

to:Magnus

现在要从文件中找出是谁发送的邮件,我们可以在‘From:Foo fie ’中找到发件人Foo fie.实现查找:

pat6 = re.compile('From:(.*) <.>$')for line infileinput.input():

m=pat6.match(line)if m:print m.group(1)

本文主要摘自《Python基础教程》一书

持续学习中,,,

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

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

相关文章

NHibernate之旅(4):探索查询之条件查询(Criteria Query)

本节内容 NHibernate中的查询方法条件查询(Criteria Query)1.创建ICriteria实例2.结果集限制3.结果集排序4.一些说明根据示例查询(Query By Example)实例分析结语上一节&#xff0c;我们介绍了NHibernate查询语言的一种&#xff1a;NHibernate查询语言(HQL&#xff0c;NHiberna…

LeetCode 205. 同构字符串(哈希map)

1. 题目 给定两个字符串 s 和 t&#xff0c;判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t &#xff0c;那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换&#xff0c;同时保留字符的顺序。 两个字符不能映射到同一个字符上&#xff0c;但字符可…

soapui返回值类型都有哪些_法兰的类型都有哪些以及法兰的设计

法兰的类型都有哪些呢&#xff1f;1. 压力容器的法兰可以按照法兰总体的结构&#xff0c;分为一般法兰还有反向法兰。2 .按照法兰垫片布置的类型来说&#xff0c;我们可以分为窄面法兰还有宽面法兰两个大类。a.窄面法兰指的是垫片的接触面&#xff0c;位于法兰螺栓孔所包围的圆…

别等ChatGPT开源了,升级版OPT开源模型来了!

源&#xff5c;新智元编&#xff5c;Joey 昕朋今年五月&#xff0c;MetaAI官宣发布了基于1750亿参数的超大模型OPT-175B&#xff0c;还对所有社区免费开放。12月22日&#xff0c;该模型的更新版本OPT-IML&#xff08;Open Pre-trained Transformer&#xff09;正式上线&#xf…

浅谈“三层结构”原理与用意(转帖)

浅谈“三层结构”原理与用意 序 在刚刚步入“多层结构”Web应用程序开发的时候&#xff0c;我阅读过几篇关于“asp.net三层结构开发”的文章。但其多半都是对PetShop3.0和Duwamish7的局部剖析或者是学习笔记。对“三层结构”通体分析的学术文章几乎没有。 2005年2月11日&#…

python bottle支持https_python bottle 简介

bottle是一个轻量级的pythonweb框架&#xff0c; 可以适配各种web服务器&#xff0c;包括python自带的wsgiref(默认)&#xff0c;gevent&#xff0c; cherrypy&#xff0c;gunicorn等等。bottle是单文件形式发布&#xff0c;源码在这里可以下载&#xff0c;代码量不多&#xff…

NVIDIA重磅发布NVAIE 3.0,AI时代的操作系统来了

文&#xff5c;卖萌酱近年来&#xff0c;AI技术发展迅速&#xff0c;随着以Pytorch、TensorFlow为代表的深度学习框架的成熟&#xff0c;AI模型的训练流程已经变得相对清晰、成熟。然而&#xff0c;预训练模型和后续一系列超大模型的出现&#xff0c;使得对于大部分AI开发者和企…

python序列符号_Python中的文本和字节序列

导语&#xff1a;本文章记录了本人在学习Python基础之数据结构篇的重点知识及个人心得&#xff0c;打算入门Python的朋友们可以来一起学习并交流。本章重点&#xff1a;1、了解字符字节等概念&#xff0c;编解码问题&#xff1b;2、熟悉字符的规范化处理和双模式API。一、基本概…

LeetCode 258. 各位相加

1. 题目 给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。 示例: 输入: 38 输出: 2 解释: 各位相加的过程为&#xff1a;3 8 11, 1 1 2。 由于 2 是一位数&#xff0c;所以返回 2。 进阶: 你可以不使用循环或者递归&#xff0…

读取 Radio 的值

读取 Radio 的值 2 <form id"form1"action""method"">3 <div><input type"radio"name"r"id"r1"value"一"><label for"r1">选项一</label></div>4 <d…

够快,首个“开源ChatGPT项目“来了!网友吐槽:这谁能跑

文&#xff5c;明敏 源&#xff5c;量子位就说程序员的手速有多快吧&#xff0c;首个开源ChatGPT项目已经出现了&#xff01;基于谷歌语言大模型PaLM架构&#xff0c;以及使用从人类反馈中强化学习的方法&#xff08;RLHF&#xff09;&#xff0c;华人小哥Phillip Wang复刻了一…

linux 串口工具_会C++就能开发Linux/Android应用!这款Yoxios X3串口屏火了...

大家好&#xff0c;我是小月月。今天给大家介绍一款搭载YOXIOS操作系统的YOXIOS X3串口屏&#xff0c;只要你会C/C就能开发Linux/Android应用&#xff01;而且小月月带来了福利——“免费试用名额”&#xff01;&#xff01;YOXIOS X3介绍YOXIOS X3串口屏比传统串口屏要强大得多…

LeetCode 278. 第一个错误的版本(二分查找)

1. 题目 你是产品经理&#xff0c;目前正在带领一个团队开发新的产品。 不幸的是&#xff0c;你的产品的最新版本没有通过质量检测。 由于每个版本都是基于之前的版本开发的&#xff0c;所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, …, n]&#xff0c;…

LeetCode 284. 顶端迭代器

1. 题目 给定一个迭代器类的接口&#xff0c;接口包含两个方法&#xff1a; next() 和 hasNext()。 设计并实现一个支持 peek() 操作的顶端迭代器 – 其本质就是把原本应由 next() 方法返回的元素 peek() 出来。 示例: 假设迭代器被初始化为列表 [1,2,3]。调用 next() 返回 1…

ChatGPT国内镜像站

ChatGPT介绍 ChatGPT是OpenAI开发的一个大型预训练语言模型。它是GPT-3模型的变体&#xff0c;GPT-3经过训练&#xff0c;可以在对话中生成类似人类的文本响应。ChatGPT 旨在用作聊天机器人&#xff0c;我们可以对其进行微调&#xff0c;以完成各种任务&#xff0c;如回答问题…

【转】DATAGRIDVIEW控制

目录&#xff1a; 取得或者修改当前单元格的内容 设定单元格只读 不显示最下面的新行 判断新增行 行的用户删除操作的自定义 行、列的隐藏和删除 禁止列或者行的Resize ★ DataGridView 取得或者修改当前单元格的内容&#xff1a; GO TO TOP 当前单元格指的是 DataGridView…

matlab 动画_MATLAB绘图动画(1)

今天写一个案列&#xff0c;绘图动画画出以下曲面函数随着theta角的变化的动图程序代码&#xff1a;clc,clear,close allx-8:0.5:8;[X,Y]meshgrid(x);rsqrt(X.^2Y.^2);Zsin(r)./r;figure(color,w);surf(Z); %画出帧theAxes axis; %保存…

LeetCode 2020 力扣杯全国春季编程大赛(1644/4093,前40.2%)

文章目录1. 比赛结果2. 题目解析2.1 拿硬币 Easy2.2 传递信息 Esay2.3 剧情触发时间 Medium2.4 最小跳跃次数 Hard2.5 二叉树任务调度 Hard1. 比赛结果 前两题比较顺利&#xff0c;24分钟做出来了&#xff0c;第3&#xff0c;4两题试了好久&#xff0c;都显示超时&#xff0c;…

silverlight2.0 demo实例,源码下载

这是最近发现的微软官方网站上提供的学习例子&#xff0c;并有源码下载&#xff0c;与大家分享。 http://silverlight.net/Community/gallerydetail.aspx?catsl2 下面这个链接是银光开源中心提供的&#xff0c;也不错哦。。 http://www.slcenter.cn/ YoLing音频播放器v1.0 for…

网页设计框架布局代码_网页设计中的分屏切割布局法

今天和大家聊的是一种关于网页设计中的视觉呈现方法&#xff0c;一般我们称之为“分屏布局”&#xff0c;是一种常见的网页设计排版方式&#xff0c;将页面分割为均等或者不均等的两部分&#xff0c;这种方式的好处就是可以将文字信息和图像元素进行更有效的布局区分&#xff0…