【python学习第11节笔记:正则表达式,python中使用正则表达式】

文章目录

一,正则表达式

什么是正则表达式:正则表达式又称规则表达式。用来匹配,检索,替换符合某个规则的文本。表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符,及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

1.1元字符

1.1.1元字符(1)

. 匹配单个字符,如 r.t匹配 rat,rot 等
* 匹配任意多个字符

  • 匹配一个或多个在它之前的那个字符,如:r+t 匹配 rt ,rrt 等
    \ 转意字符将元字符当作普通字符

1.1.1元字符(2)

? 只能匹配0或1个在他之前的字符,如: r?t ,只匹配 t 或者 rt
| 两个匹配条件进行逻辑''或''运算,如: \(him\|her\) 匹配 him 或者 her
匹配行结束符,如: boy 匹配以boy位行结尾的字符串
^ 匹配一行的开始,如: ^boy 匹配以boy为行首的字符串

1.1.1元字符(3)

\] 匹配括号中的任意一个字符,如:r\[aou\]t 匹配 rot, rat, rut \[c1-c2\] 括号中可以使用连字符-来指定,如:\[0-5\],匹配 0 1 2 3 4 5 \[\^c1-c2\] 匹配除了指定区间外的补集,如:\[\^257a-c\]匹配除了2 5 7 a b c以外的任何一个字符 #### 1.1.1元字符(4) \\\< 和 \\\> 匹配词(word)的开始和结束,如:\\\匹配 them 不匹配 other \\( \\) 将两个之间的表达式定义为一个'"组",并且将这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \\1 到 \\9的符号来引用。如:%s/\\(99\\)/\\1aa/g 将99替换成99aa #### 1.1.1元字符(5) \\{ i \\} 和 \\{i , j \\} 匹配指定数目的字符,如:a\[1-6\]\\{2\\}能够匹配到a后面跟着的正好2个字符的a13, a24, a54等不会匹配到 a123 ## 二,python中使用正则表达式 python通过使用re模块,获得全部正则表达式的功能 ### 2.1re.match **对字符串进行完整的匹配(从0开始匹配)** > re.match(pattern, string, flags=0) pattern:  匹配的正则表达式 string:   要匹配的字符串 flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 示例1: ```python import re print(re.match('www','www2 213 sad')) #在起始位置匹配 print(re.match('www','2 213 swwwad')) #不在起始位置匹配 #执行结果 <_sre.SRE_Match object; span=(0, 3), match='www'> None ``` 示例2: . 代表任意一个字符 \* 是前面一个字符的任意重复 re.I 表示忽略大小写 r 表示原始字符串(不用转义) ```python print("\ne") print(r"\ne") #执行结果 e \ne ``` 直接输出matchobj.group()会输出匹配到的整句话,matchobj.group(1)会输出匹配到的第一组 matchobj.group(2)会输出匹配到的第一组。 ```python import re line = "Page is a pig" matchobj = re.match(r'(.*) is a (.*)',line,re.I) print(matchobj.group()) print(matchobj.group(1)) print(matchobj.group(2)) #执行结果 Page is a pig Page pig ``` ### 2.2re.search **扫描整个字符串并返回第一个成功的匹配** > re.search(pattern, string, flags=0) pattern:  匹配的正则表达式 string:   要匹配的字符串 flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 示例: ```python import re print(re.search('www','2 213 swwwad')) print(re.search('www','2 213 swwwad').group()) #匹配不上返回空 #执行结果 <_sre.SRE_Match object; span=(7, 10), match='www'> www ``` ### 2.3re.sub **用于替换字符串中的匹配项** > re.sub(pattern , repl , string , count=0, flags=0) pattern:  匹配的正则表达式 repl:  替换的字符串,也可以为一个函数 string:   要被查找替换的字符串 count:  模式匹配后替换的最大次数,默认 0 表示替换所有的匹配 flags:   标志位,用于 控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 示例1:传入的是一个字符串 #.\*$ 的意思是以#开头任意字符结尾 \\D 的意思是非数字的字符串 ```python import re phone = "0086-10-12345678 #这是一个国内北京的电话号码" #删除后面的注释 num = re.sub(r'#.*$',"",phone) print(num) #删除非数字的字符串 num = re.sub(r'\D',"",phone) print(num) #执行结果 0086-10-12345678 00861012345678 ``` 示例2:传入的是一个函数 (?P\...):这部分是正则表达式中的命名捕获组语法。它允许给一个子模式(...)指定一个名称,这里的名称是'value'。通过这个名称,可以在匹配结果中引用到这个具体的子模式。 \\d+:这是一个子模式,用于匹配一个或多个数字字符。\\d表示匹配任意一个数字字符(0-9),而+表示匹配前面的模式一次或多次。 ```python import re def double(matched): value = int(matched.group('value')) return str(value*2) s = '321+123=444' print(re.sub('(?P\d+)',double,s)) #执行结果 642+246=888 ``` ### 2.4 正则表达式修饰符 1,re.I : 忽略大小写匹配 2.,re.M : 多行匹配。使 \^ 和 $ 可以匹配每一行的开头和结尾,而不仅仅是整个字符串的开头和结尾。 3.re.S : 单行匹配。使 . 可以匹配包括换行符在内的任意字符 4,re.X: 冗长模式。允许使用空白字符和注释来增加正则表达式的可读性。

相关推荐
Mantanmu9 分钟前
Python训练day40
人工智能·python·机器学习
天天爱吃肉821812 分钟前
新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
android·python·嵌入式硬件·汽车
ss.li15 分钟前
TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
javascript·人工智能·python
l木本I28 分钟前
大模型低秩微调技术 LoRA 深度解析与实践
python·深度学习·自然语言处理·lstm·transformer
哆啦A梦的口袋呀32 分钟前
基于Python学习《Head First设计模式》第七章 适配器和外观模式
python·学习·设计模式
笑鸿的学习笔记33 分钟前
虚幻引擎5-Unreal Engine笔记之SET节点的输出引脚获取设置后的最新变量值
笔记·ue5·虚幻
恰薯条的屑海鸥35 分钟前
零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
学习·安全·web安全·渗透测试·网络安全学习
十月狐狸35 分钟前
Python字符串进化史:从青涩到成熟的蜕变
python
草莓熊Lotso38 分钟前
【数据结构初阶】--算法复杂度的深度解析
c语言·开发语言·数据结构·经验分享·笔记·其他·算法
东京老树根1 小时前
SAP学习笔记 - 开发27 - 前端Fiori开发 Routing and Navigation(路由和导航)
笔记·学习