python学习-08【正则表达式】

1、正则表达式的基本语法

普通字符

1、判断一个长度为 1 的字符串是否为数字。

[] 表示这是一个字符组,表示匹配包含的任意一个字符

[0123456789]
2、如果 [] 中的字符是连续的,就可以使用 - 省略中间的字符。

[0-9][a-z][A-Z]
3、判断长度为 2 的字符串包含的是否是数字,可以使用==两个 []==进行判断

[0-9][0-9]
4、匹配包括所有英文大小写

[a-zA-Z][A-Za-z]

元字符

元字符是正则表达式中有特殊含义的字符

元字符 说明
. 匹配除换行符以外的任意字符
\ 转义字符,可以解除特殊字符的特殊功能
^ 匹配字符串开始的位置
$ 匹配字符串结束的位置
* 匹配前面的字符 0 次或多次
+ 匹配前面的字符 1 次或多次
? 匹配前面的字符 0 次或 1 次
{n} 匹配前面的字符 n 次
{n.} 匹配前面的字符至少 n 次
{n,m} 匹配前面的字符至少 n 次,至多 m 次
`x y`
[xyz] 匹配 xyz 中任意一个字符
[^xyz] 不匹配 xyz 中的字符
[^m-z] 匹配未在指定范围 m 到 z 中的任何字符
\A 只匹配字符串的开头
\B 匹配非单词边界
\b 匹配某个单词边界
\D 匹配非数字字符
\d 匹配数字字符
\f 匹配换页字符
\n 匹配换行符
\r 匹配回车字符
\S 匹配任何非空白字符
\s 匹配任何空白字符,包括空格、制表符等
\W 匹配任何非单词字符
\w 匹配任何单词字符,包括数字和下划线
\Z 只匹配字符串结尾或结尾的换行符之前
\z 只匹配字符串的结尾
  • 默认情况下,^\A 的功能相同,$\Z 的功能相同,但是如果设置了 re.MUKTILINE 的标志,^$ 还可以匹配换行符的位置,而两外两个不可以。
  • 除此之外,() 可以起到分组作用,() 中包含的是正则表达式的子表达式
转义字符

1、匹配一个 IP 地址:

[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{3}\.[0-9]{1,3}
2、如果想要匹配 \,则需要使用 \\

简化:在字符串左侧加上 r 前缀

限定符

限定数量的字符,用来限定一个目标表达式要重复出现几次才会匹配成功

即上表中的 *、+、?、{n}、{n,}、{n,m}......

e.g.:获取 9 位QQ号:^\d{9}$

定位符

表示字符串或某个单词的边界

即上表中的 ^、$、\B、\b

2、正则表达式和 re 模块

在使用 re 模块前,需要通过 import 引入:import re

compile 方法

如果重复使用某个正则表达式,,可以使用 compile() 方法将正则表达式编译成 Pattern 对象
re.compile(pattern[,flag])

  • pattern:字符串形式的正则表达式
  • flag:可选参数,表示匹配模式
    • re.I ( re.IGNORECASE ):忽略大小写匹配
    • re.M ( re.MULTILINE ):多行模式
    • re.S ( re.DOTALL ):点(.) 任意匹配模式,会改变 . 的匹配方式,可以匹配任意字符
    • re.X ( re.VERBOSE ):详细模式,该模式下的正则表达式可以是多行的,也可以添加注释,空白符号会被忽略。

re.compile() 方法返回一个正则表达式的对象

python 复制代码
import re
pattern = re.compile(r"""\d+ # 匹配数字整数部分
. # 匹配数字小数点
\d* #匹配数字小数部分""", re.X)
match 方法

match 方法只对字符串匹配一次,只要在起始位置匹配到一个符合要求的字符就会返回值,并不会返回所有符合的结果
match(pattern, string, flags)

  • pattern:字符串形式的正则表达式
  • string:要匹配的字符串
  • flags:可选参数,表示匹配模式

search() 方法的语法格式与 match() 方法相同

search() 方法不仅在字符串的起始位置进行搜索匹配,也会在符合条件的其他位置进行匹配

findall 方法

用于在整个字符串中搜索所有符合正则表达式的字符串

匹配成功的结果以列表的形式返回

基本语法与 match() 方法相同

sub 方法

可以使用正则表达式替换字符串
sub(pattern, rep1, string, count, flags)

  • pattern:字符串形式的正则表达式
  • rep1:用来替换的字符串
  • string:表示原始字符串
  • count:可选参数,表示模式匹配后替换的最大次数(默认值为 0 表示替换所有匹配到的字符串)
  • flags:可选参数,标志位,用于控制匹配方式
split 方法

通过正则表达式分割字符串,并以列表的形式返回
split(pattern, string, maxsplit, flags)

  • pattern:字符串形式的正则表达式
  • string:表示原始字符串
  • maxsplit:可选参数,表示最大的拆分次数
  • flags:可选参数,标志位,用于控制匹配方式

e.g.:分隔 URL 的 /:

python 复制代码
import re
pattern = r'[\/]+'
url = 'https://docs.python.org/zh-cn/3'
rules = re.split(pattern, url)
print(rules)

3、正则表达式拓展

贪婪匹配和非贪婪匹配

使用 group() 和 groups() 方法获取分组的内容。

group(N) 用于返回第 N 组括号匹配的字符

groups() 用于返回所有括号匹配的字符,并以元组形式返回
贪婪匹配指限定符尽可能多地匹配字符串,正则表达式默认情况下启用贪婪匹配。
非贪婪匹配则相反,在限定符后买你加上 ? 表示非贪婪匹配。

常用的正则表达式
  • 匹配首空白字符:^\s|\s$
  • 匹配日期格式:^\d{4}-\d{1,2}-\d{1,2}$
  • 匹配有效的月份:^(0?[1-9]|1[0-2])$
  • 匹配有效的日期:^(0?[1-9]|((1|2)[0-9])|30|31)$
  • 匹配固定电话号码:^(\d{3,4}-)?\d{7,8}$
  • 匹配身份证号码:^((\d{18})|([0-9x]{18})|([0-9X]{18}))$
  • 匹配 URL:^(https:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([\/\w .-])\/?$
  • 匹配用户名:^[a-zA-Z][a-zA-Z0-9_]{4,15}
  • ......
相关推荐
网易独家音乐人Mike Zhou2 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书2 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
小二·3 小时前
java基础面试题笔记(基础篇)
java·笔记·python
朝九晚五ฺ5 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
小喵要摸鱼5 小时前
Python 神经网络项目常用语法
python
一念之坤6 小时前
零基础学Python之数据结构 -- 01篇
数据结构·python
猫爪笔记6 小时前
前端:HTML (学习笔记)【1】
前端·笔记·学习·html
wxl7812276 小时前
如何使用本地大模型做数据分析
python·数据挖掘·数据分析·代码解释器
NoneCoder6 小时前
Python入门(12)--数据处理
开发语言·python
pq113_67 小时前
ftdi_sio应用学习笔记 3 - GPIO
笔记·学习·ftdi_sio