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}
  • ......
相关推荐
高级程序源19 分钟前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe31 分钟前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic1 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna1 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
别动我齐刘海2 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
必须得开心呀2 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan2 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂2 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师3 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan3 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游