python基础语法学习: 正则表达式

文章目录

正则表达式

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

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

例如: 验证一个字符串是否符合电子邮箱地址的条件, 只需要配置好正则规则, 即可匹配任意邮箱, 不如通过正则规则: (^[\w-]+(\.[\w+]+)*@[\w+](.\[w-]+)+$) 即可匹配一个 字符串是否是标准邮箱格式

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

正则的三个基础方法

python正则表达式, 使用 re 模块, 并基于re模块中三个基础方法来做正则匹配, 分别是: match, search, findall三个基础方法

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

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

示例1:

python 复制代码
import re

s = 'python hello python hello'
result = re.match('python', s)
print(result) # <re.Match object; span=(0, 6), match='python'>
print(result.span()) # (0, 6)
print(result.group()) # python
print(result.start()) # 0
print(result.end()) # 6

span()方法,如果匹配成功, 返回字符串所在下标

group()方法, 如果匹配成功,返回值

注意: 如果匹配不成功, 调用上述两个方法会报错

实例2:

python 复制代码
import re

s = '1pythoh hello, python, hello'
result = re.match('python', s)
print(result) # None

开头没有python,返回None

match()是从开头进行匹配, 如果开头不匹配, 后面就不再关心

  • serch(匹配规则, 被匹配字符串)

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

python 复制代码
import re

s = '1python, hello, pythonhello'
result = re.search('python', s)
print(result) # <re.Match object; span=(1, 7), match='python'>
print(result.span()) # (1, 7)
print(result.group()) # python
  • findall(匹配规则, 被匹配字符串)

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

python 复制代码
import re
s = 'hello python, helloipython'
result = re.findall('python', s)
print(result) # ['python', 'python']

s = 'hello world'
result = re.findall('python', s)
print(result) # []

找不到返回空list: \[\]

元字符匹配

正则表达式最强大的功能在于元字符匹配规则

单字符匹配

字符 功能
. 匹配任意 1 个字符(除了 \n),\. 匹配点本身
\[\] 匹配 \[\] 中列举的字符
\d 匹配数字,即 0‑9
\D 匹配非数字
\s 匹配空白,即空格、tab 键
\S 匹配非空白
\w 匹配单词字符,即 a‑z、A‑Z、0‑9、_
\W 匹配非单词字符
python 复制代码
import re
s = 'hello @@python!!66##item32cd'
# 找出全部数字
result1 = re.findall(r'\d', s)
print(result1) # ['6', '6', '3', '2']
# 找出特殊字符
result2 = re.findall(r'\W', s)
print(result2) # [' ', '@', '@', '!', '!', '#', '#'] `

找出全部英文字母

python 复制代码
result3 = re.findall(r'[a-zA-Z]', s)
print(result3) # ['h', 'e', 'l', 'l', 'o', 'p', 'y', 't', 'h', 'o', 'n', 'i', 't', 'e', 'm', 'c', 'd'] 

[]内可以写a-zA-Z0-9这三中范围组成或指定单个字符如[aceDFG12]

python 复制代码
result4 = re.findall(r'[acd123]', s)
print(result4) # ['3', '2', 'c', 'd']

数量匹配

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

边界匹配

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

分组匹配

字符 功能
` `
() 将括号中字符作为一个分组

示例:

python 复制代码
import re

r = '^[0-9a-zA-Z]{6, 10}'
s = '1234567'
print(re.findall(r, s)) # []

上述代码打印结果是[], 这是为什么呢?

在匹配规则中, {6,10}中不可以写空格,会导致匹配出错

相关推荐
benchmark_cc11 小时前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
伞伞悦读11 小时前
【第70期】Adam二阶矩不是方差:偏差校正、动量与AdamW完整实验
python
外收内放12 小时前
Python基础语法练习题(73)
java·前端·python
锋行天下12 小时前
Langgraph HITL 中断运行,用户输入后输出打字效果
人工智能·python
时早玖沐13 小时前
给 AstrBot 写一个天气推送插件:12 次提交、6 个坑
python·开源·ai编程
触底反弹13 小时前
🚀 FastAPI 五大重难点深度剖析:从 500 报错到彻底搞懂 Depends、Pydantic 与 SQLAlchemy
python·fastapi
cpolar技术支持13 小时前
网关加 gzip,同时开启 chunked,下载回来的包解不开:把两层编码的解压顺序与长度核对做成只读页
python·http·网络编程·socket·内网穿透
小嘉丶学长13 小时前
Day14 · 字典与集合
java·开发语言·网络·python·学习·1024程序员节
迪菲赫尔曼13 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
用户83562907805113 小时前
Python 调整 Excel 工作表显示设置
后端·python