走入计算机的第二十五天(内置模块3之正则表达式)

一 什么是正则表达式

就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

正则表达式的功能:字符串的模糊匹配查询。

二  re模块

不同的语言均有使用正则表达式的方法,python中是用re模块实现的。

使用的方法格式:变量名=re.re中的其中一个子模块("规则","内容")

元字符

1   .(点) :可以代替除换行符以外任意一个元素

1 # ret=re.findall("方..","方杰,方合意,方磊,光东,阿杰,李杰,方何军")    ##匹配出所有符合条件的元素
2 # print(ret)

2  ^  :匹配第一个 元素的类容,匹配不成功,也不会去匹配后面的元素

# ret=re.findall("^方.","方杰,方合意,方磊,光东,阿杰,李杰,方何军")   #匹配出所有符合条件的元素
# print(ret)

3 $ :匹配该对象的最后一个内容,不会去匹配其他位置的内容

 ret=re.findall("y..n$","方杰,方合意,方磊,光东,阿杰,李杰,方何军yuan")   #匹配出所有符合条件的元素
# print(ret)

4 * :匹配表达式内容的0次到无数次

#ret=re.findall("333\d*","333234214455,333255654534246,545556564367656653,4453576489780423")
# print(ret)

5 + : 匹配表达式内容的1次到无数次

#ret=re.findall("333\d+","3334214455,333255654534246,333,56564367656653,4453576489780423")
# print(ret)

6 ?: 匹配表达式内容的0次或者1次

# ret=re.findall("\d?","2342,43,7654,87")
# print(ret)

7 {}:自定义次数

#ret=re.findall("\d{16}","234214455,663255654534246,545556564367656653,4453576489780423")
# print(ret)

*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

# ret=re.findall(‘131\d+?‘,‘1312312312‘)
# print(ret) 

匹配一个数字包括整型和浮点型

# ret=re.findall("\d+\.?\d+","3555,8498,64.674,2344")
# print(ret)

转义符

1 反斜杠后面跟元字符,会去掉特殊的功能

# ret=re.findall("\.com","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
# print(ret)

2 反斜杠后面加上一些普通字符会实现一些特殊的功能

\d 匹配任何十进制数; 它相当于类 [0-9]。

# ret=re.findall("\d","yuan3236$655&34")
# print(ret)

\D 匹配任何非数字字符; 它相当于类 [^0-9]。

# ret=re.findall("\D","yuan3236$655&34")
# print(ret)

\s 匹配任何空白字符; 它相当于类 [ \t\n\r\f\v]。

# ret=re.findall("\s","hello i love like")
# print(ret)

\S 匹配任何非空白字符; 它相当于类 [^ \t\n\r\f\v]。

# ret=re.findall("\S","hello i love like")
# print(ret)

\w 匹配任何字母数字字符; 它相当于类 [a-zA-Z0-9_]。

# ret=re.findall("\w","yuan323665534")
# print(ret)

# ret=re.findall("\w+","yuan323665534")
# print(ret)

\W 匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]

# ret=re.findall("\W","yuan3236$655&34")
# print(ret)

\b 匹配一个特殊字符边界,比如空格 ,&,#等\b是特殊符号所以前面需要加r

# ret=re.findall(r"i\b","hello i love like")
# print(ret)

# ret=re.findall(r"i\b","hello i love li$ke")
# print(ret)

分组  ()

ret=re.findall("(fang)","fangffksdl;hfangfangfnag")
# print(ret)
#
# ret=re.findall("(fang)+","fangffksdl;hfangfangfnag")
# print(ret)
# ret=re.findall("方","方杰,方合意,方磊,光东,阿杰,李杰,方何军")    ##匹配出所有符合条件的元素# print(ret)

m = re.findall(r‘(ad)+‘, ‘add‘)
print(m)

ret=re.search(‘(?P<id>\d{2})/(?P<name>\w{3})‘,‘23/com‘)
print(ret.group())#23/com
print(ret.group(‘id‘))#23
#命名分组ret=re.search(r"blog-aticles-(?P<year>20[01]\d)-(\d+)","blog-aticles-2005-12")print(ret.group(‘year‘))

ret=re.search(r"blog-aticles-(?P<year>20[01]\d)-(?P<mansh>\d+)","blog-aticles-2005-12")print(ret.group(‘mansh‘))

字符集  |

字符集 | 或者的意思 要配合 ()用的

# ret=re.findall("www\.(\w+)\.(com|cn)","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
# print(ret)

# ret=re.findall("www\.(?:\w+)\.(?:com|cn)","www.baidu.com,www.youji.com,www.xiongdi.com,www.ss.cn")
# print(ret)

字符集  []

字符集[]:  在[]里面多选一的效果  一个字符集只匹配一个字符
# ret=re.findall(r"a[bc]","abcjpofdabhiac")
# print(ret)

# ret=re.findall(r"a[bc]d","abdcjpofdabhiacd")
# print(ret)

# ret=re.findall(r"a[b.c]d","abcjpofdabhia.dc")
# print(ret)
字符集里面只有三个特殊符号:- ^ \


# ret=re.findall(r"[0-9]","ds1246634347cvkdhsd")
# print(ret)
#
#
# ret=re.findall(r"[a-z]","ds1246634347cvkdhsd")
# print(ret)
#
# ret=re.findall(r"[A-Z]","ds1246DSJFKS47cvkdhsd")
# print(ret)
#
# ret=re.findall(r"[A-Za-z0-9]","ds1246634347cvkdhsd")
# print(ret)

# ret=re.findall(r"a[\d]c","ds12a34c7cvkdhsd")
# print(ret)

# ret=re.findall(r"[^\d]","ds1246634347cvkdhsd")
# print(ret)

# ret=re.findall(r"[^\da-z]","ds1246634347cvk#dhsd")
# print(ret)

search  函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,没有则会则返回None,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,就会报错

#只有匹配到了一项内容就不会在继续匹配了
ret=re.search("(fang)+","fangffksdl;hfangfangfnag")
print(ret)
print(ret.group())

#没有匹配内容则会返回None,group()则会报错报错
ret=re.search("(fakl)+","fangffksdl;hfangfangfnag")
print(ret)
print(ret.group())

match  函数会在字符串开始位置查找模式匹配对象,没有则会则返回None,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,就会报错

#match  只匹配字符串开头的位置
# ret=re.match("(fang)+","fangffksdl;hfangfangfnag")
# print(ret)
# print(ret.group())

#开头位置匹配不上就会报错
# ret=re.match("(fang)+","sdffangffksdlaihngfangfnag")
# print(ret)
# print(ret.group())
 

时间: 2024-10-25 18:47:30

走入计算机的第二十五天(内置模块3之正则表达式)的相关文章

走入计算机的第二十六天(内置模块4)

一 补充正则表达式的其他一些使用方法 1.贪婪模式:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配 1 #贪娈匹配 2 # ret=re.findall("abc+","abccccccccccccccgds") 3 # print(ret) 4 5 # ret=re.findall("abc{1,}","abccccccccccccccgds") 6 # print(ret) 2非贪婪匹配:在满足匹配时,匹配尽

走入计算机的第十五天(python基础三)

一 变量值之类型与对象程序中需要处理的状态很多,于是有了不同类型的变量值,x='egon',变量值'egon'存放与内存中,绑定一个名字x,变量值即我们要存储的数据. 在python中所有数据都是围绕对象这个概念来构建的,对象包含一些基本的数据类型:数字,字符串,列表,元组,字典等程序中存储的所有数据都是对象,一个对象(如a=1)有: 一个身份(id) 一个类型(type) 一个值(通过变量名a来查看) 二 可变对象与不可变对象    实例被创建后,身份和类型是不可变的,    如果值是不可以被

走入计算机的第二十九天(继承与派生)

一 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 单继承:就相当于子类继承了一个父类.    多继承:就相当于子类继承了多个父类. python中类的继承分为:单继承和多继承 1 class ParentClass1: #定义父类 2 pass 3 4 class ParentClass2: #定义父类 5 pass 6 7 class SubClass1(ParentClass1): #单继承,基类是P

大白话5分钟带你走进人工智能-第二十五节决策树系列之信息增益和信息增益率(4)

                                                       第二十五节决策树系列之信息增益和信息增益率(4) 上一节我们讲解了决策树的分裂条件以及评估纯度的其中一个方式,基尼系数.本节的话,我们再讲解一个评估纯度的方式,基于信息增益的方式,即ID3树使用的评估方式.它办的事跟Gini系数一样,也是评价纯度,但是它更客观一点,但它算起来比Gini系数稍慢一点,它办的事跟Gini系数一样,也是评价纯度,但是它更客观一点,算起来比Gini系数稍慢一点,

centos lamp/lnmp阶段复习 第二十五节课

centos  lamp/lnmp阶段复习   第二十五节课 上半节课 下半节课 f

第二十五天 慵懒的投射在JDBC上的暖阳 —Hibernate的使用(四)

6月4日,晴天."晴日暖风生麦气,绿阴幽草胜花时."      "道"是只有中国人才懂得并孜孜以求的特殊的宇宙存在感的体验.全世界只有中文才能阐释"道"的全部涵义.然而所谓阐释,并不重在定义,更多的还是感受. "道"既在"虚无"之内,又超越了"虚无",成为中国文化最平常但又最玄妙的一种境界. 老庄认为:道是宇宙的本体,即是宇宙万物的老祖宗.    老外认为:Tao is the sour

第二十五课:超越抽象极限

1.一个阶跃输入,后面接戴维南电阻,测量点Vout,之后接其他设计电路,末端开路 理论上在同一时刻Vout也发生阶跃(例如 0到5V) 实际上,在t=0是,输出上升到一半,持续一段时间才会继续上升到5V 这是因为当导线非常长时,需要考虑信号传输时间 脉冲到达末端返回到Vo,Vo得到一个回波,两个2.5V相加就达到5V 这个阻抗对于多数导线都等于50欧姆,称之为特性阻抗 解决方法:换短的导线: 改变时钟信号 2.同一个电压对多个反相器供电 前一个反相器在上端导通时,通过的电流变化会在电感上产生压降

NeHe OpenGL教程 第二十五课:变形

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十五课:变形 变形和从文件中加载3D物体: 在这一课中,你将学会如何从文件加载3D模型,并且平滑的从一个模型变换为另一个模型. 欢迎来到这激动人心的一课,在这一课里,我们将介绍模型的变形.需要注意的是各个模型必须要有相同的顶点,

Gradle 1.12用户指南翻译——第二十五章. Scala 插件

其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://github.com/msdx/gradledoc/tree/1.12. 直接浏览双语版的文档请访问: http://gradledoc.qiniudn.com/1.12/userguide/userguide.html. 另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前