Python正则表达式(re模块)

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: Python正则表达式(re模块)

概述

正则表达式

  • 英文名为Regular Expression,又称规则表达式。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

Python正则表达式

  • Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python语言拥有全部的正则表达式功能。同时,re 模块是用c语言写的,其匹配速度非常快。
  • 其中compile函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。re模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

re模块

re.match方法

re.match 尝试从字符串的起始位置匹配一个规则,匹配成功就返回match对象,否则返回None。可以使用group()获取匹配成功的字符串。

  • 语法:re.match(pattern, string, flags=0)
  • 参数说明:

3ee94caebb8c9faeb7e7d2341f739d7.png

示例1(无标志位):

a8a3d61f6df62b337017426dbddec1e.png

示例2(有标志位):

f7f7e0a0ac49cb43a72e92eac43dd16.png

  • 如果同时使用多个标志位使用|分割,比如re.I | re.M
  • flags可选标志位

  • 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

示例:

常用的匹配规则-匹配字符

  • .(点):匹配任意除换行符之外的字符

[ ] :匹配中括号内的任意一个字符

  • \d :匹配一个数字

  • \D 匹配非数字,即不是数字

  • \s 匹配空白字符串

  • \S 匹配非空白字符

  • \W 匹配非单词字符
  • \w 匹配单词字符,即a-z、A-Z、0-9、_

常用的匹配规则-匹配字符数量

  • *:匹配前一个字符出现0次或者无限次,即可有可无

:使用实例,写一个正则匹配python变量名(变量名的语法规则:不能以数字开头,变量名只能包含字母,数字,下划线)

  • ?:使用实例,匹配0-99的数字

  • {n,m} :匹配前一个字符出现从n到m次,使用实例,匹配qq邮箱

常用的匹配规则-原生字符串

  • python字符串中\作为转义字符开头,比如\n表示换行,\t表示tab键,为了表示\本身,再加一个\,成为\形式在python中表示路径‘G:\py资料\1-上课资料\4-正则表达式课件\html’

  • 下面使用正则表达式来匹配路径

  • 正则表达式里使用"“作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”",那么使用编程语言表示的正则表达式里将需要4个反斜杠""。
  • 在python中有原生字符串,在字符串前面加上r表示字符串中的\不转义。

常用的匹配规则-匹配开头结尾

示例:匹配163.com的邮箱地址

常用的匹配规则- 分组匹配

  • |:匹配出0-100之间的数字

  • (ab) 分组:分别匹配电号码区号和电话号码

  • \ :匹配html中的文本

  • 其实我们发现html的标签都是成对出现的,这样匹配规则html就可以引用组来实现,避免重复写。

  • 在使用组引用的时候如果有多个组就容易造成混乱,比如下面多个组引用,这样很混乱也不容易阅读

解决上面这个问题得给分组起别名

  • (?P)分组起别名
  • (?P=name)引用别名为name分组匹配到的字符串

注:(?P)和(?P=name)中的字母P大写

re.compile方法

compile 将正则表达式模式编译成一个正则表达式对象

  • reg = re.compile(pattern) result = reg.match(string)
  • 等效于 result = re.match(pattern, string)
  • 使用re.compile()和保存所产生的正则表达式对象重用效率更高

re.search方法

search 在全文中匹配一次,匹配到就返回

  • 语法:re.search(pattern, string, flags=0)
  • 函数参数说明:

  • 示例:扫描字符串,寻找的第一个由该正则表达式模式产生匹配的位置,并返回相应的MatchObject实例。

re.findall方法

findall 匹配所有返回一个列表,这个方法使用频率较高。

  • 语法:findall(string[, pos[, endpos]])
  • 参数说明:

  • 示例:使用findall来匹配出段子网中的所有段子

通过观察网页源代码,可以看出段子都包含在(.*?)中

re.sub方法

sub 将匹配到的数据进行替换

  • 语法:sub(pattern, repl, string, count=0, flags=0)
  • 参数说明:

  • 示例:

re.split方法

split 根据匹配进行切割字符串,并返回一个列表

  • 语法:split(pattern, string, maxsplit=0, flags=0)
  • 参数说明:

  • 示例:

贪婪模式与非贪婪模式

概述

  • Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符,非贪婪则相反,总是尝试匹配尽可能少的字符。
  • 在"*","?","+","{m,n}"后面加上?,使贪婪变成非贪婪.

案例

  • 匹配淘女郎模特首页所有图片url链接

网站url:

图片url

<img src="//gtd.alicdn.com/sns_logo/i1/TB124_3NXXXXXasXVXXSutbFXXX.jpg_240x240xz.jpg">

正则表达式应该写成

  • ‘<img src="(.*)>’

  • 默认贪婪模式

  • 使用非贪婪模式


相关文章
|
15天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
25天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
41 5
|
1月前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
1月前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
1月前
|
数据采集 Web App开发 JavaScript
python-selenium模块详解!!!
Selenium 是一个强大的自动化测试工具,支持 Python 调用浏览器进行网页抓取。本文介绍了 Selenium 的安装、基本使用、元素定位、高级操作等内容。主要内容包括:发送请求、加载网页、元素定位、处理 Cookie、无头浏览器设置、页面等待、窗口和 iframe 切换等。通过示例代码帮助读者快速掌握 Selenium 的核心功能。
116 5
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy教程之SciPy模块列表13:单位类型。常量模块包含多种单位,如公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了如何使用`constants`模块获取零摄氏度对应的开尔文值(273.15)和华氏度与摄氏度的转换系数(0.5556)。
18 1
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
18 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy 教程之 SciPy 模块列表 15 - 功率单位。常量模块包含多种单位,如公制、质量、时间等。功率单位中,1 瓦特定义为 1 焦耳/秒,表示每秒转换或耗散的能量速率。示例代码展示了如何使用 `constants` 模块获取马力值(745.6998715822701)。
16 0
|
1月前
|
JavaScript Python
SciPy 教程 之 SciPy 模块列表 15
SciPy教程之SciPy模块列表15:单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。功率单位以瓦特(W)表示,1W=1J/s。示例代码展示了如何使用`constants`模块获取马力(hp)的值,结果为745.6998715822701。
19 0
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 13
SciPy 教程之 SciPy 模块列表 13 - 单位类型。常量模块包含多种单位:公制、二进制(字节)、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例:`constants.zero_Celsius` 返回 273.15 开尔文,`constants.degree_Fahrenheit` 返回 0.5555555555555556。
14 0