Python高阶技巧 正则表达式

正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本。

简单来说,正则表达式就是使用:字符串定义规则,并通过规则去验证字符串是否匹配。

比如,验证一个字符串是否是符合条件的电子邮箱地址,只需要配置好正则规则,即可匹配任意邮箱。

比如通过正则规则: (^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$) 即可匹配一个字符串是否是标准邮箱格式

但如果不使用正则,使用if else来对字符串做判断就非常困难了。

正则的三个基础方法

Python正则表达式,使用re模块,并基于re模块中三个基础方法来做正则匹配。

分别是:match、search、findall 三个基础方法

re.match(匹配规则, 被匹配字符串)

从被匹配字符串开头进行匹配, 匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空。

re.search(匹配规则, 被匹配字符串)

搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后

整个字符串都找不到,返回None

re.findall(匹配规则, 被匹配字符串)

匹配整个字符串,找出全部匹配项

找不到返回空list: []

元字符匹配

正则最强大的功能在于元字符匹配规则。 单字符匹配:

|-----------|--------------------------------|
| 字符 | 功能 |
| . | 匹配任意1个字符 (除了\n),\. 匹配点本身 |
| [ ] | 匹配[ ]中列举的字符 |
| \d | 匹配数字,即0 - 9 |
| \D | 匹配非数字 |
| \s | 匹配空白,即空格、tab键 |
| \S | 匹配非空白 |
| \w | 匹配单词字符,即a-z、A-Z、0-9、 |
| \W | 匹配非单词字符 |
[单字符匹配]

示例:

字符串 s = "itheima1 @@python2 !!666 ##itcast3"

  • 找出全部数字: re.findall(r'\d', s)

字符串的r标记,表示当前字符串是原始字符串,即内部的转义字符无效而是普通字符

  • 找出特殊字符:

re.findall(r'\W', s)

  • 找出全部英文字母:

re.findall(r'[a-zA-Z]', s)

\]内可以写:\[a-zA-Z0-9\] 这三种范围组合或指定单个字符如 \[aceDFG135

|-----------|------------------------|
| 字符 | 功能 |
| * | 匹配前一个规则的字符出现0至无数次 |
| + | 匹配前一个规则的字符出现1至无数次 |
| | 匹配前一个规则的字符出现0次或无数次 |
| {m} | 匹配前一个规则的字符出现m次 |
| {m,} | 匹配前一个规则的字符出现最少m次 |
| {m,n} | 匹配前一个规则的字符出现m到n次 |
[数量匹配]

|---------|---------------|
| 字符 | 功能 |
| ^ | 匹配字符串开头 |
| $ | 匹配字符串结尾 |
| \b | 匹配一个单词的边界 |
| \B | 匹配非单词边界 |
[边界匹配]

|--------|------------------|
| 字符 | 功能 |
| | | 匹配左右任意一个表达式 |
| () | 在括号中字符作为一个分组 |
[分组匹配]

案例

  • 匹配账号,只能由字母和数字组成,长度限制6到10位

规则为: ^[0-9a-zA-Z]{6, 10}$

  • 匹配QQ号,要求纯数字,长度5-11,第一位不为0

规则为:^[1-9][0-9]{4, 10}&

1-9\]匹配第一位,\[0-9\]匹配后面4到10位 * 匹配邮箱地址,只允许qq、163、gmail这三种邮箱地址 规则为:\^\[\\w-\]+(\\.\[\\w-\]+)\*@(qq\|163\|gmail)(\\.\[\\w-\]+)+\& * \[\\w-\]+ 表示出现a-z A-Z 0-9 _ 和 - 字符最少一个,最多不限 * (\\.\[\\w-\]+)\*,表示出现组合 . 和 a-z A-Z 0-9 _ -的组合最少0次,最多不限 用于匹配:[email protected]中的ced.efg这部分 * @表示匹配@符号 * (qq\|163\|gmail)表示只匹配这3个邮箱提供商 * (\\.\[\\w-\]+)+表示a-z A-Z 0-9 _ -的组合最少1次,最多不限 用于匹配[email protected]中的.com.cn这种 最后使用+表示最少一次,即比如:.com 多了可以是:.com.cn.eu这样

相关推荐
亚林瓜子1 分钟前
pyenv简单的Python版本管理器(macOS版)
开发语言·python·macos·pyenv
青钰未央3 分钟前
14、Python时间表示:Unix时间戳、毫秒微秒精度与time模块实战
python·改行学it
墨绿色的摆渡人1 小时前
pytorch小记(二十二):全面解读 PyTorch 的 `torch.cumprod`——累积乘积详解与实战示例
人工智能·pytorch·python
小白—人工智能2 小时前
数据分析 —— 数据预处理
python·数据挖掘·数据分析
若叶时代2 小时前
数据分析_Python
人工智能·python·数据分析
英英_2 小时前
python 爬虫框架介绍
开发语言·爬虫·python
大模型铲屎官3 小时前
【Python-Day 14】玩转Python字典(上篇):从零开始学习创建、访问与操作
开发语言·人工智能·pytorch·python·深度学习·大模型·字典
yunvwugua__3 小时前
Python训练营打卡 Day27
开发语言·python
Stara05114 小时前
基于多头自注意力机制(MHSA)增强的YOLOv11主干网络—面向高精度目标检测的结构创新与性能优化
人工智能·python·深度学习·神经网络·目标检测·计算机视觉·yolov11
那雨倾城5 小时前
使用 OpenCV 将图像中标记特定颜色区域
人工智能·python·opencv·计算机视觉·视觉检测