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}
  • ......
相关推荐
深蓝海拓14 分钟前
Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
数据库·python·qt·pyqt
无须logic ᭄21 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
百流34 分钟前
scala文件编译相关理解
开发语言·学习·scala
Channing Lewis34 分钟前
flask常见问答题
后端·python·flask
Channing Lewis36 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
水兵没月2 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
我想学LINUX3 小时前
【2024年华为OD机试】 (A卷,100分)- 微服务的集成测试(JavaScript&Java & Python&C/C++)
java·c语言·javascript·python·华为od·微服务·集成测试
雁于飞3 小时前
c语言贪吃蛇(极简版,基本能玩)
c语言·开发语言·笔记·学习·其他·课程设计·大作业
数据小爬虫@6 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python