模块基础——正则表达式及re模块的使用

Python常用模块 之 re:提供整个正则表达式的实现 阅读详情

正则表达式

​ 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

​ 正则表达式和语言没有关系,他不止在Python中会使用到,在其他的开发语言中也会使用到,在在整个编程界有着举足轻重的地位。下面我们通过一个小案例来引入。

​ 当我们进行注册一个网站的时候,有时需要输入手机号,但是如果你随便输入,它会显示不符合电话号码的格式,这是怎么完成的呢?其实都是在程序后台进行了参数校验,一般情况下我们的解决方法会是什么样的呢?

手机号的特征:

  1. 必须是数字
  2. 手机号是11位
  3. 满足常见的手机号:13,15,18,19

解决代码:

while True:
    phone_number = input('please input your phone number : ')
    if len(phone_number) == 11 \
            and phone_number.isdigit()\
            and (phone_number.startswith('13') \
            or phone_number.startswith('14') \
            or phone_number.startswith('15') \
            or phone_number.startswith('18')):
        print('手机号码合法')
    else:
        print('手机号码不合法')

但是我们如果使用了正则表达式,解决代码如下:

import re
phone_number = input('please input your phone number : ')
if re.match('^(13|14|15|18)[0-9]{9}$',phone_number):
        print('手机号码合法')
else:
        print('手机号码不合法')

通过对比,很明显我们能分辨出来^(13|14|15|18)[0-9]{9}$就是使用了正则表达式,这样的方式更加简便,注意在Python中,是通过借助re模块来对正则表达式进行使用的。下面我们对正则表达式进行详细的介绍。

补充:正则表达式在线测试工具:http://tool.chinaz.com/regex/

字符组
# 语法格式:[字符组]
在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示
正则说明
[0123456789]匹配0-9中的任意一个数字,注意只匹配一个字符
[0-9]匹配0-9中的任意一个数字,注意只匹配一个字符
[a-z]匹配a-z的26个小写英文字母,注意只匹配一个字符
[A-Z]匹配A-Z的26个大写英文字母,注意只匹配一个字符
[0-9a-zA-Z]匹配大写字母和小写字母以及数字,注意只匹配一个字符
字符
元字符说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线
\s匹配任意的空白符
\d匹配数字
\n匹配一个换行符
\t匹配一个制表符
\b匹配一个单词的结尾
^匹配字符串的开始
$匹配字符串的结尾
元字符说明
\W匹配非字母或数字或下划线
\D匹配非数字
\S匹配非空白符
a|b匹配字符a或字符b
()匹配括号内的表达式,也表示一个组
[…]匹配字符组中的字符
[^…]匹配除了字符组中字符的所有字符
量词
量词说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n次到m次
贪婪匹配和非贪婪匹配

​ 正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),即为尝试匹配尽可能多的字符;非贪婪的则相反,即匹配尽可能少的字符。

​ 例如:正则表达式ab*如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词ab*?,将找到”a”。

  • 常用的几个非贪婪匹配Pattern

    表达式说明
    *?重复任意次,但尽可能少重复
    +?重复1次或更多次,但尽可能少重复
    ??重复0次或1次,但尽可能少重复
    {n,m}?重复n到m次,但尽可能少重复
    {n,}?重复n次以上,但尽可能少重复
  • .*?的用法

    . 表示是任意字符
    * 表示是重复0到无穷次
    ? 表示非贪婪模式
    
    组合在一起的意思就是取尽可能少的任意字符,但是一般情况下不会单独使用,会按照.*?x来使用,表示的含义为取前面任意长度的字符,直到字符x出现结束。
    

re模块

​ 在Python中,要想使用正则表达式,就必须借助re模块。

re模块下的常用方法
  • findall():返回所有满足匹配条件的结果,放在列表里

    import re
    
    res = re.findall('a', 'eva evenon yuan')
    print(res) # 结果 : ['a', 'a']
    
  • search():函数会在字符串内查找模式匹配,只到找到第一个匹配的返回,返回的结果为一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

    import re
    
    res = re.search('a', 'eva evenon yuan')
    print(res.group()) # 结果 : 'a'
    
    res1 = re.search('a', 'bbbbbbb')
    print(res1)  # None
    
  • match():与search一样,但是不同点在于只在字符串开头处匹配。

    import re
    
    res = re.match('a', 'abc').group()
    print(res)  # 'a'
    

注意:findall()的优先级匹配。

import re

res = re.findall('www.(baidu|sogou).com', 'www.baidu.com')
print(res)  # ['baidu']     
# 这是由于findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
# 通过?:来取消权限

ret = re.findall('www.(?:baidu|sogou).com', 'www.baidu.com')
print(ret)  # ['www.baidu.com']
实战练习

对红牛官网的各分公司信息进行提取。

# 前提准备:保存红牛官网源代码为redbull.txt  获取方式为:右键查看源代码,复制保存即可。

# 代码:
with open('redbull.txt', 'r', encoding='utf-8') as f:
    data = f.read()

title_list = re.findall('<h2>(.*?)</h2>', data)
address_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)

all_list = list(zip(title_list, address_list, email_list, phone_list))

for item in all_list:
    print("""
        公司:%s
        地址:%s
        邮箱:%s
        电话:%s
    """ % (item[0], item[1], item[2], item[3]))
张量分解浅谈(四 Tucker 分解) 学完了SVD算法之后,我们继续回到张量几大分解的学习上来,本期学习的主要内容是张量的 Tucker 分解 以及 前面的CP分解还留下一点没有说完,正好一并补齐!后面的公式我将采用颜色标记,红色代表必须掌握,蓝色尽量掌握! 在这之前先附一张图,包含了各种运算符号的名称含义,大部分是前面说过或者使用过的: Tensor decomposition一 . Tucker 分解公式介绍和原理二 . 张量的 n-Rank 一 . Tucker 分解公式介绍和原理 我们先来看一张被使用过很多次的Trucker 分解图 阅读详情

相关推荐

基于车辆运动学的规划算法 - Hybrid A*/ State Lattice Planning (前置知识:自行车模型、Dubins、Reeds Shepp、多项式曲线、螺旋曲线)

本文将按顺序讲解基于车辆运动学的规划算法,以及需要的前置知识:自行车模型、Dubins和Reeds Shepp曲线、多项式曲线和螺旋曲线

BigDavid123的博客 4860

python——正则表达式(re模块)详解

在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re。 正则表达式的大致匹配过程是: 1.依次拿出表达式和文本中的字符比较, 2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 3.如果表达式中有量词或边界,这个过程会稍微有一些不同。 r:在带有 'r' 前缀的字符串字面值中,反斜杠不必做任何特殊处理。 因此 r"\n" 表示包含 '\' 和 'n' 两个字符的字符串,而 "\n" 则表示只包含一个换行符的字符串。 re模块的

guo_qingxia的博客 28万+

Gemini 3.1 Flash本地部署实操:Ollama+Open WebUI零门槛运行指南

大型语言模型(LLM)本地运行是指将模型权重下载至本地设备,通过推理引擎完成离线推理的过程;其核心原理依赖量化压缩(如GGUF格式)与轻量级运行时(如Ollama)实现CPU/GPU高效加载;技术价值在于低延迟响应、数据隐私可控及免网络依赖;典型应用场景包括办公提效(邮件/周报生成)、学生学习辅助、产品原型验证等边缘AI任务;本文聚焦Gemini 3.1 Flash这一面向消费级硬件优化的轻量模型变体,结合Ollama模型管理与Open WebUI图形界面,提供从环境准备、模型拉取到流式对话的完整新手实操路

weixin_32238157的博客 494

re正则模块的简单使用

简介 re正则模块是我们的python中用来匹配字符的。因为我们的python时常需要处理一些杂复杂的数据文件,我们需要使用re正则模块将我们所需要的数据从我们的文件中提取出来。 以下是一个简单的举例: 这里我们首先导入我们的re正则数据包,然后我们创建了一段字符串,我们想要匹配出我们字符串中的数字字符,我们就可以使用我们的re正则模块,将我们的匹配方法放入我们的reg中,其中\d的作用就是匹配字符串中的单个数字 将我们需要匹配的对象和匹配的法则传递给我们的re.findall函数,然后我们就能够找

芊樱烛渊的博客 605

超全!!snowboy语音唤醒(树莓派4b)

通过snowboy进行树莓派的语音唤醒

crimaster1024的博客 8735

CoppeliaSim(原V-REP)新手上路

CoppeliaSim(原V-REP)是一个机器人仿真平台,里面有很多来自别的公司的机器人模型以及完备的物理引擎,我们可以通过python,c++,matlab等语言控制里面的机器人。,您也可以在官网中Downloads里找您需要的版本,一般只需要下载EDU版本就可以了,我下载的是v4.1.0 windows EDU版本。在版本V4之前,CoppeliaSim叫V-REP,在官网可以下载到之前的V-REP版本。

qq_37051669的博客 4万+

【艾琪出品】《计算机应用基础》【试题汇总2】

自备留用 《Java语言程序设计》20春期末考核 1. 接口体中不应包含( )。 A 常量定义 B 常量赋值 C 方法实现 D 方法声明 2. 以下( )不是Java的关键字。 A FALSE B const C this D void 3. 以下关于继承的叙述正确的是()。 A 在Java中类只允许单一继承 B 在Java中一个类只能实现一个接口 C 在Java中一个类不能同时继承一个类和实现一个接口 D 在Java中接口只允许单一继承 4. 编译并且执行以下代码,会出现什么情况...

加油 2万+

【STM32单片机】RS485通信—基于STM32G474芯片

做项目需要用485通信来控制Go电机参考资料:【【STM32F103C8T6系列】10. 实验例程——485(USART串口)通讯实验】 https://www.bilibili.com/video/BV19w411r7ka/?PDF: STM32G474 开发指南 正点原子 DMG474 开发板教程 第28章485只是物理层,代码逻辑还是UART串口通信,相当于是电路有RS485转换芯片,所以还是用UART串口通信方式。

m0_48808835的博客 3647

南开大学python编程基础_《Python编程基础》20春期末考核(参考答案)南开大学 答案...

《Python编程基础》20春期末考核 -00001试卷总分:100得分:70一、单选题 (共 15 道试题,共 30 分)1.执行"print(0o20)",则在屏幕上会输出( )。A.20B.0o20C.16D.32正确答案:2.如果一个类C1通过继承已有类C而创建,则将C1称作( )。A.子类B.基类C.父类D.超类正确答案:3.用于结束本次循环并开始下一次循环的命令是( )。A.bre...

weixin_29534463的博客 1691

ST7789驱动实战:从SPI时序到RGB565显示的完整配置解析

本文详细解析了ST7789液晶驱动芯片的SPI时序配置与RGB565显示实现,从数据手册解读到代码实战,涵盖SPI接口配置、关键寄存器设置及完整初始化流程。通过优化DMA传输和常见问题排查,帮助开发者高效驱动ST7789显示屏,适用于嵌入式显示项目开发。

weixin_29162439的博客 184

USB 网卡——RNDIS 控制消息流程

在其控制端点上获取控制消息时,设备必须在通信类接口的中断 IN 端点上返回通知,每当设备可以返回控制消息时,主机就会轮询该通知。需要注意的是,如果设备由于某种原因收到GET_ENCAPSULATED_RESPONSE,并且无法使用控制端点上的有效数据做出响应,则应返回设置为 0x00 的单字节数据包,而不是 stall 控制端点。下表中定义了此传输。收到 RESPONSE_AVAILABLE 通知后,主机使用下表中定义的GET_ENCAPSULATED_RESPONSE 传输从控制端点读取控制消息。

tyustli 371

【python基础】正则表达式及re模块使用

Python系列之基础篇: 正则表达式及re模块使用

在红尘中争渡 1931

【数字IC验证进阶】正则表达式(Regular Expression)快速入门指南

在芯片开发过程中,正则表达式的使用非常常见。初次上手晦涩难懂,多用几次爱不释手!

悟已往之不谏 知来者之可追 1441

Python_Mix*re模块基础方法,进阶,正则表达式的使用

re模块import re 基础方法 findall:匹配所有 ,每一项都是列表中的一个元素,返回的是列表 search只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法来获取结果,如果没有匹配到,会返回None,使用group会报错. match:从头开始匹配,相当于search中的正则表达式加上一个^ 字符串处理的扩展: ...

weixin_33699914的博客 119

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

正则表达式的基础内容介绍以及re模块的使用

在本章中介绍了正则表达式的基础内容,以及re模块的使用,让读者能够全面的了解到什么叫做正则表达式。

weixin_66751719的博客 214

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python之正则表达式(re模块)

本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示:由于该站对MARKDOWN的表格支持的不是很好,所以本文中的表格均以图片的形式提供,大家如果看着比较模糊,可以放大来看或下载图片在本地查看。 正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns)。它本质上是一个小巧的、高度专用的编程语.

1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python之re模块实现正则表达式

ZONGXP的博客 8161

python——正则表达式re

目录 一、re模块介绍 1. re模块提供的类 2. re模块提供的函数 3. 标志位flags 二、使用re模块的步骤 1. 使用re模块进行正则匹配操作的步骤 2. 使用re模块进行内容查找、替换和字符串分隔操作的步骤 三、re模块简单应用示例 1. 匹配测试 2. 内容查找 3. 内容替换 4. 字符串分割 四、关于匹配对象的说明 五、说说正则表达式字符串前的r前缀 六、re模块综合应用实例 0. 实例背景与准备工作 实例1. 首先匹配玩家手中的牌是否符合游戏规则

zangba9624的博客 2428

Python之re模块

re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用

m0_59485658的博客 2036

python中re模块的用法

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面我主要总结了re的常用方法。 1.re的简介     使用python的re模块,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息。python 会将正则表达式转化

ym19641221的专栏 2452

python正则表达式——re模块的使用

python正则表达式——学习re模块 本文所有的代码使用的python版本为python3.5.1,运行环境为Ubuntu 16.04 LTS, GCC 5.3.1. 本文参考的python文档版本为python3.5.2,强烈建议英语不错的同学直接读文档。这篇博客只是作者阅读文档时的学习笔记,若有纰漏请指出,让我们共同进步。正则表达式基础介绍正则表达式正则表达式re是python自带的模块,

大音希声大象无形 1万+

python正则_万字长文详解Python正则表达式及re模块

大家好,偷学Python系列是由小甜同学从初学者的角度学习Python的笔记,其特点就是全文大多由新手易理解的代码与注释及动态演示。刚入门的读者千万不要错过!本文带来的是偷学Python第三十一天:Python正则表达式语法及re模块的使用,其他内容将在近期更新完毕,本文主要将涉及以下内容正则表达式基础 什么是正则表达式不管是使用Windows的搜索工具,还是在word文档里面的查找和替...

weixin_39983993的博客 345

Python-Re模块教程

一、正则表达式 re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。注意: re模块是python独有的 正则表达式所有编程语言都可以使用 re模块、正则表达式是对字符串进行操作 因为,re模块中的方法大都借助于正则表达式,故先学习正则表达式。 (一)常用正则 1、字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 正则 待匹配字符 匹配结果

花开如雨的博客 1288

python list 查找 正则_python正则表达式及RE模块

今天我们就说一个模块,那就是re,不过想要了解re模块,我们得先了解一下什么是正则表达式,有助于我们更好的学习re模块一.正则表达式首先, 我们在网页上进行注册或者登陆的时候经常能看到一些格式上的错误提示,比如:你在注册百度账号的时候https://passport.baidu.com/v2/?reg&regType=1&tpl=wk 输入用户名随意的输入系统会提示你,你的账号过长...

weixin_39901358的博客 2251

Python爬虫基础——re模块的提取、匹配和替换

re是Python的一个第三方库。 为了能更直观的看出re的效果,我们先新建一个HTML网页文件(可直接复制): index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <...

WoLykos 2438

基于pycharm的正则表达式Re库使用教程

基于pycharm的正则表达式Re库使用教程正则表达式语法Re库的基本使用Match对象Match对象的属性Match对象的方法正则表达式的常用方法re.search()re.match()re.findall()re.split()re.finditer()re.sub()re.compile() 正则表达式语法 正则表达式在编程语言、数据库等领域都应用广泛,可以自己总结知识点,等忘记了再回来查看,当然也有专门的正则表达式网站。 Re库的基本使用 Re库是Python的标准库,不用我们安装,其主要用于字

❀雾里看花花里看雾❀ 4719
上一篇: 模块基础——相对导入、绝对导入及软件开发目录规范
下一篇: 常用模块——time、datetime、random模块
Jakey_src
博客等级 码龄9年 10粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值