第七章 Python系统模块 06-正则模块
发布日期:2024-04-18 10:39:22
浏览次数:753
分类:技术文章
本文共 3130 字,大约阅读时间需要 10 分钟。
正则模块
1. 正则的介绍
正则表达式,并不是Python独有的,而是一套独立的、自成体系的知识点。在很多语言中,都有对正则的使用。
正则表达式是用来做字符串的校验、匹配的工作的,其实正则表达式只有一个作用:验证一个字符串是否与指定的规则匹配。
但是,在很多的语言中,都在匹配的基础上,添加了其他的功能。
"""需求:验证一个字符串,是否是一个合法的QQ号码 1、一个QQ号码由6到12位的数字组成,不能包含其他部分 2、一个QQ号码不能以数字0作为开头"""def check_qq_number(number): s = str(number) # 验证长度 if not 6 <= len(s) <= 12: return False # 验证纯数字 if not s.isdigit(): return False # 验证不以0开头 if s.startswith('0'): return False return Truedef check_qq_number_with_re(number): return re.compile('[1-9]\\d{5,11}').fullmatch(number) is not Noneprint(check_qq_number_with_re('012345678'))
2. 常用元字符
元字符 | 意义 |
---|---|
^ | 匹配一个字符串的开头。 在fullmatch的正则匹配中,可以省略不写。 |
$ | 匹配一个字符串的结尾。 在fullmatch的正则匹配中,可以省略不写。 |
[] | 匹配一位字符。[abc]: 表示这一位的字符, 可以是a、也可以是b、也可以是c 。[a-z]: 表示这一位的字符, 可以是 [a, z] 范围内的任意的字符。[a-zABC]: 表示这一位的字符, 可以是 [a,z ] 范围内的任意字符, 或者A、或者B、或者C 。[a-zA-Z]: 表示这一位的字符, 可以是任意的字母, 包括大写字母和小写字母。[^abc]: 表示这一位的字符, 可以是除了 a、b、c 之外的任意字符。 |
\ | 转义字符。 |
\d | 匹配所有的数字, 等同于 [0-9] 。 |
\D | 匹配所有的非数字, 等同于 [^0-9] 。 |
\w | 匹配所有的单词字符, 等同于 [a-zA-Z0-9_] 。 |
\W | 匹配所有的非单词字符, 等同于 [^a-zA-Z0-9_] 。 |
. | 通配符, 可以匹配一个任意的字符。 |
+ | 前面的一位或者一组字符, 连续出现了一次或多次。 |
? | 前面的一位或者一组字符, 连续出现了一次或零次。 |
* | 前面的一位或者一组字符, 连续出现了零次、一次或多次。 |
{} | 对前面的一位或者一组字符出现次数的精准匹配。{m} : 表示前面的一位或者一组字符连续出现了m次。{m,} : 表示前面的一位或者一组字符连续出现了至少m次。{m,n} : 表示前面的一位或者一组字符连续出现了至少m次,最多n次。 |
| | 作用于整体或者是一个分组, 表示匹配的内容, 可以是任意的一个部分。abc|123|opq : 表示整体的部分, 可以是 abc, 也可以是 123, 也可以是 opq |
() | 分组。 把某些连续的字符视为一个整体对待。 |
3. Python的正则基本处理
Python中的正则表达式基本使用
pattern_obj = re.compile(正则语法规则, 匹配的标记格式)涉及到的几个类
re.Pattern: 正则表达式对象,用来描述正则表达式 re.Match: 匹配结果对象,用来描述正则匹配的结果,包含匹配的位置和匹配的内容 .group(): 获取到匹配的内容 .group(N): 获取匹配到的第N组的内容 .group(group_name): 获取匹配到的指定组名的内容 .span(): 获取到匹配的位置常用方法
pattern_obj.match('字符串') 从前往后查找匹配项,找到了就返回匹配的部分(Match对象),找不到返回Nonepattern_obj.fullmatch('字符串') 用指定的正则语法规则,匹配整个的字符串,能够匹配就返回匹配部分(Match对象),匹配不到就返回Nonepattern_obj.search('字符串') 在指定的字符串中查找满足规则的子串,返回第一个匹配部分(Match对象),找不到就返回Nonepattern_obj.findall('字符串') 在指定的字符串中查找所有满足规则的子串,返回一个列表pattern_obj.finditer('字符串') 在指定的字符串中查找所有的匹配项,返回迭代器(迭代Match对象)pattern_obj.split('字符串') 将一个字符串使用指定的正则切割pattern_obj.sub(替换函数,字符串,替换数量) 将匹配到的每一个部分,使用指定函数处理,并替换掉原有的内容
re包简化
在re包的_init_.py文件中定义了若干个函数,用来简化上述方法的使用。
re.match('正则表达式', '字符串')re.match('正则表达式', '字符串') re.fullmatch('正则表达式', '字符串') re.search('正则表达式', '字符串') re.findall('正则表达式', '字符串') re.finditer('正则表达式', '字符串') re.split('正则表达式', '字符串') re.sub('正则表达式', '替换函数','字符串','替换数量')
匹配标记格式
re.I 忽略大小写的匹配 re.M 多行匹配,会影响到^和$ re.S 使.可以匹配包括换行符在内的所有字符4. 示例代码
import re"""1、基础元字符匹配"""res1 = re.fullmatch('.+', '')if res1 is not None: print(res1.group(), res1.span())"""2、分组的匹配"""res2 = re.fullmatch('(\\w{6,16})@(?Phello
126|163|qq|gmail|yahoo)\\.com', 'test_youxiang@163.com')if res2 is not None: print(res2.groups()) # 获取到所有分组 print(res2.group(1)) # 按照序号获取分组 print(res2.group('company_name')) # 按照名字获取分组"""3、按照正则切割"""res3 = re.split('\\d+', 'hello123world4python456mysql')print(res3) # ['hello', 'world', 'python', 'mysql']"""4、按照正则替换"""res4 = re.sub('\\d+', ', ', 'tom123jerry33lilei45lucy')print(res4) # tom, jerry, lilei, lucy
转载地址:https://blog.csdn.net/zhxc1024/article/details/128887350 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月11日 23时58分54秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Android之Retrofit基本用法篇
2019-04-30
Netty与网络协议资料整理
2019-04-30
golang实现大数据量文件的排序
2019-04-30
golang中的time包
2019-04-30
2019NOIP D4题 加工领奖
2019-04-30
2021.5.19 JS高级第二天
2019-04-30
SpringBoot内置Tomcat配置参数
2019-04-30
ubuntu 快捷键
2019-04-30
linux 根目录下文件夹分析
2019-04-30
linux 查看分区和文件大小
2019-04-30
Not using PCAP_FRAMES 解释(snort中)
2019-04-30
技术转管理?这些“坑”你要绕道走
2019-04-30
领域驱动设计(DDD)前夜:面向对象思想
2019-04-30
Camera驱动调试小记
2019-04-30
四线触摸屏原理
2019-04-30
C/C++如何返回一个数组/指针
2019-04-30
腾讯AI语音识别API踩坑记录
2019-04-30
YbtOJ——递推算法【例题4】传球游戏
2019-04-30
安装openrave 0.9的各种依赖包
2019-05-01