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

author author     2022-09-06     723

关键词:

一 什么是正则表达式

就其本质而言,正则表达式(或 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("333d*","333234214455,333255654534246,545556564367656653,4453576489780423")
# print(ret)

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

#ret=re.findall("333d+","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(‘131d+?‘,‘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 匹配任何空白字符; 它相当于类 [ fv]。

 

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

 

S 匹配任何非空白字符; 它相当于类 [^ fv]。

 

# 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)

 

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

 

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

# ret=re.findall(r"i","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())

 

 

 

 

 

 

走入计算机的第二十七天(模块与包的调用)

一模块(module)的概念在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,每个文件包含的代码就... 查看详情

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

一什么是继承继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类  单继承:就相当于子类继承了一个父类。   多继承:就相当于子类继... 查看详情

走入计算机的第二十八天(面向对象的程序设计)

 一 什么是面向对象的程序设计及为什么要有它面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。优点是:极... 查看详情

学习python的第二十三天(re模块)(代码片段)

6.13自我总结1.re模块1.re.findall()1.基本用法re.findall(正则匹配的格式,匹配的对象)2.正则匹配常用格式1.^只匹配开头在多行模式中匹配每一行的开头类似字符串内置方法里面的startswithimportres='''aaaa,123213123,____,杨aaaaa''&#... 查看详情

走入计算机的第五天(关注于目录的操作)

---恢复内容开始--- 1 一些简单的命令  cat:查看文件的所有内容。 head:查看文件头几行的内容,默认前十行。后面加上(-数字)就是看那个数字对应的前几行。 tail:查看文件后几行的内容,默认后十行... 查看详情

走入计算机的第二十天(迭代器)

一迭代器迭代的意思:类似于循环每一次重复的过程就被称为迭代的过程,提供迭代方法的容器称为迭代器。1.迭代器协议是指:迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,知道所有的元素被... 查看详情

第二十五天

2018-07-22今天写的是22号的,因为最近的晚上根本就没时间写。只能不断的顺移到下一天,当我来到图书馆的时候昨天,丽莹终于让我下午出来了也许是游戏真的挺不错的吸引了她真的很希望她快点开始上班那样,她就不用再那么... 查看详情

第二十五天

今天的练习,打了5次的成果,感觉还是棒棒哒。<scripttype="text/javascript">setInterval("changeli()",1000);functionchangeli(){varli_obj=document.getElementsByTagName("li");varul_obj=document.getElementsByTagName("ul")[ 查看详情

(92)wangdao.com_第二十五天_事件event(代码片段)

1.事件Event事件的本质是:程序各个组成部分之间的一种通信方式,也是异步编程的一种实现DOM的事件操作分为:监听 和触发    都定义在EventTarget接口____所有节点对象都部署了EventTarget 接口,其他一些需要... 查看详情

第二十五天审计audit

检查是否开启审计功能(参数):SQL>showparameteraudit_trail关闭审计功能:SQL>altersystemsetaudit_trail=FALSEscope=spfile;Systemaltered. 审计类型:1.审计系统权限:例:SQL>AUDITCREATEANYTABLE,CREATETABLEBYUSER01BYACCESS;2.审计对 查看详情

二十正则表达式(re模块)

re模块正则表达式:  字符串模糊匹配字符(普通字符、元字符)普通字符:普通字母,字符  完全匹配importreprint(re.findall(‘chen‘,‘shuaigeshichen‘))#‘chen‘元字符:$.^ *+?{}[]|()  模糊匹配re常用方法:#findall()匹配所有... 查看详情

我的第二十九篇博客---正则进阶

re.match()从头找一个re.search()找一个re.findall()找所有返回一个列表,没有就是空列表re.findall(‘\d‘,‘chuan1zhi2‘)结果为[‘1‘,‘2‘]re.sub()替换re.sub(‘\d‘,‘_‘,‘chuan1zhi2‘)结果为[‘chuan_zhi_‘]re.compile(编译)返回一个模型p,具有和... 查看详情

用python写一个计算器,不允许使用计算器方面的内置函数,只能使用+-,使用到正则表达式。(代码片段)

计算表达式:1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))的结果。解题思路:第1步:创建一个函数search_bracket_exp,通过re.rearch找到括号里面的表达式,传入到第二个函数用于表达式计算。返回一个新的表达式。express.r... 查看详情

我的学习之路_第二十六章_javascript

...容 obj.innerHtml; 设置标签体内容 obj.innerHtml=值; 使用正则表达式校验数据 1.编写正则表达式 1.用户名的正则:/^[a-z0-9_-]{3,16}$/ 查看详情

python3正则表达式re模块之辣眼睛计算器(代码片段)

额。。。学到几个常用模块了,也要其中考试了,每天晚上敲一点,敲得脑壳疼,不过又想到好一点的办法了,有时间再改吧。此非吾所欲也,实属无奈也。。。。复习之路漫漫,吾将到书上求索,在此不多逗留,我挥一挥衣袖... 查看详情

走入计算机的第十八天(函数的参数)

一 形参和实参   1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量   2.... 查看详情

团队冲刺第二十五天(代码片段)

...当地天气的相关操作。遇到的主要的问题是。有的时候在第二次进入的是时候存在显示不及时的情况。自己的就觉办法是。添加了下拉刷新的时事件。完美解决问题。实验的主要代码如下记忆运行的程序结果:packagecom.weather;impor... 查看详情

常用模块之re模块以及正则表达式扩展(代码片段)

什么是模块?  常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。  但其实import加载的模块分为四个通用类别: 使用python编写的代码(.py文件)已被编译为共享库... 查看详情