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}中不可以写空格,会导致匹配出错

相关推荐
databook几秒前
Scikit-Learn实战:5步搞定PCA降维
python·机器学习·scikit-learn
溪语流沙20 分钟前
【Web全栈进阶】JWT无状态认证:签发、校验、刷新
前端·git·python·github
reasonsummer24 分钟前
【办公类-112-08】20261009园园通信息合并配学号拆班(数据更新,用年月日期区分版本)
python
阿狗童鞋28 分钟前
Python爬虫进阶实战指南
开发语言·爬虫·python
SatanII28 分钟前
MySQL 数据库学习总结|理论 + SQL 实训完整笔记
数据库·学习·mysql
中原第一高手32 分钟前
fofatoto 1.8.0 发布:启动即知新版本、中文进度面板与更干净的 Web 日志
python·网络安全·开源·资产测绘·fofa
~kiss~34 分钟前
LangGraph 之 Human-in-the-loop,人机协作/在环
学习
APIshop38 分钟前
淘宝详情接口全解析:从官方开放平台到第三方数据服务
java·python·api
老歌老听老掉牙1 小时前
两个平面旋转平移坐标系间的坐标变换关系
python·算法·平面·旋转·平移
FITA阿泽要努力1 小时前
第 1 周·第 3 讲|工具如何交给模型:工具定义、参数与结构化调用
服务器·数据库·python·agent