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}
  • ......
相关推荐
爱吃西瓜的小菜鸡4 分钟前
【C语言】判断回文
c语言·学习·算法
小A15927 分钟前
STM32完全学习——SPI接口的FLASH(DMA模式)
stm32·嵌入式硬件·学习
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
qq_589568101 小时前
数据可视化echarts学习笔记
学习·信息可视化·echarts
兔C2 小时前
微信小程序的轮播图学习报告
学习·微信小程序·小程序
海海不掉头发2 小时前
苍穹外卖-day05redis 缓存的学习
学习·缓存
黄公子学安全2 小时前
Java的基础概念(一)
java·开发语言·python
程序员一诺3 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python
小木_.3 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器