Python笔记(8)re模块,正则表达式

Python 正则表达式使用--Re 模块详解 1. 常用正则表达式符号和特殊字符 2. Re 模块:核心函数和方法 2.1 re.compile() 编译函数 2.1.1re.compile() 语法格式 2.1.2re.compile() 用法 2.2 re.match() 和 re.search() 匹配和搜索函数 2.2.1re.match() 语法格式 2.2.2re.match() 用法 2.2.3re.search() 语法格式 2.2.4re.search() 用法 2.3 re.findall() 和 阅读详情

正则表达式(re)

some people, when confronted with a problem, think, "I know, I'll use regular expressions." Now they have two problems. 
 ----Jamie Zawinski
re模块是用来支持正则表达式的。Andrew Kuchling 的“Regular Expression HOWTO”(http://amk.ca/python/howto/regex/)是一个python中正则表达式的一个非常好的资源

什么是正则表达式?

正则表达式是一个用来匹配字符串的一个模式,最简单的正则表达式就是一个简单的字符串,比如'python'这个可以用来匹配'python'这个词语。你可以用正则表达式在一串字符中来匹配一个你要查找的内容,或者替换他,或者将其分割成不能的字符片段

通配符

re能够使用一组包特殊字符的模式来匹配任意的字符,举个例子句点“.”可以用来匹配任意的字符(除了换行符)。所以句点又叫做通配符。

转义字符

当你在re的模式中包含了特殊字符,那么就需要转义字符来使得re模式的语义正确了,转义字符是一个反斜线(\)但是在python字符串中,如果你要输入一个反斜线,那么也需要一个转义字符,所以如果你要匹配'python.org'需要'python\\.org'这样声明。因为你要进行两层转义,才能得到想要的结果,第一层是python解释器,第二层是re模块。如果你想只是用一个反斜线,可以使用原始字符串,可以这样写 r'python\.org'.

字符集

有时候你可能需要对字符串过多的控制,这时你需要将一些字符集放到一个中括号中,这样就可以匹配所有字符集中所包含的字符串了,比如
[pj]ython可以匹配python和jython
[a-z]可以匹配所有的小写字母
[a-zA-Z0-9]可以匹配所有的大小写字母和数字
如果要避开某些字符,只需要在字符集前面加上一个'^'符号就可以了,比如
[^abc]表示匹配所有的除了a,b,c三个字符外的字符。

选择和子模式(Alternatives and Subpatterns)

有时候你并不是想同配所有的字符,你可能只想同配某些东西,比如只想匹配python和perl的话,可以用管道符号'|'分割你想匹配的模式
'python|perl'用来匹配python或者perl
有时候你不并不需要用选择操作付来分割两个完整的模式,而只是一部分,这种情况,你可以其他的子模式用括号扩起来,比如
'p(ython|erl)'

可选和重复子模式(optional and Repeated Subpatterns)

问号(?)操作符,用来表示可选,既可以出现一次也可以不出现:
r'(http://)?(www.\.)?python\.org'可以匹配如下内容
'http://www.python.org'
'http://python.org'
'www.python.org'
'python.org'
除了问号,还有一些其他的子模块操作符
(pattern)*:表示可以出现一次,也可以出现无数次。
(pattern)+:表示pattern可以出现一次或者多次。
(pattern){m,n}:表示匹配出现m次到n次的pattern。

字符串的开头与结尾
'^'表示在字串的开头,'$'表示在字串的结尾
'^ht+p':会匹配'http://ptyhon.org'(或者'httttttp://python.org),但是不会匹配'www.http.org'。

re模块中的一些函数:

compile(pattern[, flags])

用来将一个字符串编译成一个pattern对象。它来进行计算的话将会有更高的效率,如果你想对一个正则表达式进行search或者match操作最好先将它转换为一个pattern对象pattern对象中包含search和match的方法re.search(pat, string)与pat.(string)是等价的,pattern对象也能用在普通的正则表达式函数中。

search(pattern, string[, flag])

如果存在的话search函数可以找到string中的第一个pattern的子串,返回一个MatchObject(值为True),没有找到的话则返回None(值为false),所以可以这样写:
if re.search(pat, string):
     print 'Found it!'

match(pattern, string[, flag])

match用来匹配在字符串的开头处的模式,如果你要匹配整个字符串的话,可以在模式串的末尾加上一个'$'

split(pattern, string[, maxsplit=0])

这个可以利用pattern的出现来进行切割,类似于split方法,但是,这个是使用正则表达式,下面是一个例子
>>> some_text = 'alpha, beta,,,,gamma
>>> re.split('[, ]+', some_text)
['alpha', 'beta', 'gamma', 'delta']
delta'
如果模式里面包含了括号,那么被括号扩起来的部分将留在被分割的字符之间。
maxsplit参数用来表示最大的被允许的分割次数。

findall(pattern, string)

findall用来返回一个字符串的list,里面包含了所有的匹配的字符串。

sub(pat, repl, string[, count=0])

sub用来替换字符串中最左边的n个符合匹配规则的模式串。
>>> pat = '{name}'
>>> text = 'Dear {name}...'
>>> re.sub(pat, 'Mr. Gumby', text)
'Dear Mr. Gumby...'

escape(string)

看下面的例子就知道了
>>> re.escape('www.python.org')
'www\\.python\\.org'
>>> re.escape('But where is the ambiguity?')
'But\\ where\\ is\\ the\\ ambiguity\\?'



flag

Python Library Reference (http://python.org/doc/lib/module-re.html)中的“module content”小节描述了flag参数的用法


匹配对象和分组(Match Object and Groups)

每当字符匹配成功都会返回一个MatchObject对象,这个对象中保留了一些字符串(字串)与模式之间匹配的一些信息。也包含了哪些是匹配了的模式串,哪些是子串的一些信息。这一部分叫做分组(group),分组的编号由最左的括号来决定,0号是整条字符串。请看下面例子:
'There (was a (wee) (cooper)) who (lived in Fyfe)'
分组如下:
0 There was a wee cooper who lived in Fyfe
1 was a wee cooper
2 wee
3 cooper
4 lived in Fyfe

分组号和替换函数:

正则表达式提供了一种非常强大的分组方法。一个简单的例子就可以体现它的强大,比如在替换字符串中使用分组号。任何替换的序列中包含了 '\\n'这个形式的东西都会被匹配了的模式串中的第n个分组所代替。下面的例子是将'*somethin*'替换为'<em>something</em>':
>>> emphasis_pattern = r'\*([^\*]+)\*'
>>> re.sub(emphasis_pattern, r'<em>\1</em>', 'Hello, *world*!')
'Hello, <em>world</em>!'


贪心和非贪心模式(greedy and nongreedy pattern)

重复操作符默认是贪心原则的,既一直匹配到无法再匹配为止,举个例子:
>>> emphasis_pattern = r'\*(.+)\*'
>>> re.sub(emphasis_pattern, r'<em>\1</em>', '*This* is *it*!')
'<em>This* is *it</em>!'
模式串匹配了从第一个一直到最后一个星号。如果不想这样,可以在后面加个问好(?),这样的话,就是使用非贪心的版本。所有的重复操作符后面加了问号的话,都会调用非贪心的版本。
>>> emphasis_pattern = r'\*\*(.+?)\*\*'
>>> re.sub(emphasis_pattern, r'<em>\1</em>', '**This** is **it**!')
'<em>This</em> is <em>it</em>!'

一个简单的模板系统:

Python中的string formating就是一个简单的模板系统,但是re提供了更加强大的模板系统。如下面代码:

#templates.py

import fileinput, re

#Matches fields enclosed in square brackets:
field_pat = re.compile(r'\[(.+?)\]')

#We'll collect variables in this:
scope = {}

#This is used in re.sub:
def replacement(match):
    code = match.group(1)
    try:
        #If the field can be evaluated, return it:
        return str(eval(code, scope))
    except SyntaxError:
        # Otherwise, execute the assignment in the same scope...
        exec code in scope
        # ... and return an empty string:
        return ''

#Get all the text as a single string:
# (There are other ways of doing this; see Chapter 11)
lines = []
for line in fileinput.input():
    lines.append(line)
text = ''.join(lines)

# Substitute all the occurrences of the field pattern:
print field_pat.sub(replacement, text)

这段代码完成的工作有
  • 为匹配的域定义一个模式
  • 定义一个字典,作为模板的scope
  • 定义一个replacement函数,完成以下的事情
    • 从match中抓获group1,然后把获取的值存入code中。
    • 对code中间的字符串在scope域中进行求值计算,或者(symtaxError被抛出)
    • 在scope域中执行获取的字符串。
  • 从文件中读取所有的行,放在一个List中,然后合成一个大的字符串。
  • 利用replace函数的返回值替换所有的匹配的值
程序演示
创建文件magnus.txt
[name= 'Magnus Lie Hetland' ]
[email= 'magnus@foo.bar']
[language = 'python']
创建文件templates.txt
[import time]
Dear [name],
I would like to learn how to program. I hear you use
the [language] language a lot -- is it something I
should consider?
And, by the way, is [email] your correct email address?
Fooville, [time.asctime()]
Oscar Frozzbozz

在终端中输入
$python templates.py magnus.txt templates.txt

结果如下:
Dear Magnus Lie Hetland,
I would like to learn how to program. I hear you use
the python language a lot -- is it something I
should consider?
And, by the way, is magnus@foo.bar your correct email address?
Fooville, Wed Apr 24 20:34:29 2008
Oscar Frozzbozz



Python的re模块 re.search、re.match()、re.finditer()三者都返回Match对象,想要使用里面的内容,可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式。这个正则表达式对象可以用于执行匹配操作,例如搜索、替换等,比直接使用。匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。re.subn():替换匹配的字符串,返回替换完成的文本和替换的次数。re.sub():替换匹配的字符串,返回替换完成的文本。 阅读详情

相关推荐

状态机设计与实现( stm32小车避障为例)

本文以STM32小车避障为例,介绍了状态机设计与实现方法。首先阐述了状态机的事件驱动特性、清晰结构和易扩展优势,并给出硬件组成框架。核心实现部分展示了状态枚举定义、状态转移图和主循环框架,通过switch-case结构实现状态切换。关键状态示例包括前方扫描和转向决策逻辑,通过传感器数据驱动状态转移。总结指出状态机设计需定义枚举状态、实现状态函数、使用switch跳转并更新全局状态。文章最后声明内容为学习笔记,欢迎读者指正交流。全文结构清晰,代码示例具体,为嵌入式系统状态机设计提供了实用参考。

2302_80219536的博客 1046

re.sub(r'\*(.+?)\*',r'\1','pages of *World Wide Spam*,')的理解

re.sub(r'\*(.+?)\*',r'\1','pages of *World Wide Spam*,') 'pages of World Wide Spam,' python环境下 re.subde 作用在于:使用给定的替换内容将匹配模式的子字符串(最左端并且非重叠的字符串)替换掉。见证其强大功能的最简单方式就是在替换字符串中使用组号。 r'\*(.+?)\*'

Echo Lab 2925

CTFshow-pwn入门-前置基础pwn32-pwn34

CTFshow-pwn入门-前置基础pwn32-pwn34

你们de4月天的博客 1130

Python(5)正则表达式

确定模式有几个子模式各部分的字符分类是什么子模式怎么重复是否有外部位置的限制是否有内部制约关系正则表达式本质上是一门语言,它不从属与Python!Python只是将他人写好的正则引擎集成到了语言内部,大多数编程语言都是这么干的!正则表达式诞生的时间很长,应用非常广泛,是业界公认的字符串匹配工具。虽然有不同版本的内部引擎,但基本通用,也就是说,你在Python内写的正则表达式,可以移植到Linux的shell,Java语言等任何支持正则的场景中去。正则表达式默认从左往右匹配。

innetdancer的博客 716

【2024遥感应用组一等奖】基于风云四号卫星的小时级大气气溶胶和颗粒物监测

最后,比较AGRI观测反射率和查找表计算的反射率反演得到的1小时分辨率AOD数据。然后,使用广泛应用的MODIS DT和DB产品进行对比,图 5显示了它们逐像元尺度的对比,AGRI LaGA算法可以捕捉亚洲地区AOD高低值空间分布格局,比如南亚次大陆、中南半岛、塔克拉玛干沙漠和华北平原是AOD高值区域(平均AOD高于0.3),中国西北、中国南方、中国东北和韩国地区为AOD中值地区(平均AOD在0.2到0.3之间),北纬45度以上以及日本地区为AOD低值区域(平均AOD小于0.2),与全球平均AOD值接近。

JData_Engineer的博客 372

4-20mA电流信号转电压

该电路实现4-20mA电流信号转电压(0.44-2.2V)调理功能,采用两级运放设计:第一级LMH6642MFX进行11倍放大,第二级配置为缓冲器加二阶低通滤波。电路包含10Ω采样电阻、多级RC滤波和ESD防护,具有抗干扰强、功耗低(4mW)等特点,适配3.3V系统ADC采集。通过使能控制MOS管可实现节能模式,适用于工业自动化、环境监测等场景。设计合理平衡了信号精度与功耗,输出电压范围留有充足余量避免饱和。

qq_37999850的博客 300

re.search()用法详解

re.search():匹配整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None pattern: 匹配的规则, string : 要匹配的内容, flags 标志位 这个是可选的,就是可以不写,可以写, 比如要忽略字符的大小写就可以使用标志位 flags: 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为: re.I忽略大小写 re.L表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境 re.M多行模式 re.S即为.并...

IT之一小佬的博客 4万+

《YOLO26/YOLO11/YOLOv8改进与系统实战》,改进与系统实战专栏目录和介绍

YOLOv8 是目前比较火和比较成熟的深度学习框架,是2023年1月发布的,由 Ultralytics 团队开发。Ultralytics自YOLOv5 开始一直积极维护和更新 YOLO 框架,因此 YOLOv8 也享有持续的维护与升级支持。因此我写下《手把手教你YOLOv8实战》专栏,专门为那些对计算机视觉、深度学习、以及目标检测技术感兴趣的读者设计。通过本专栏,你将深入理解 YOLOv8 的核心原理与实际应用,从0 开始学习并掌握如何使用 YOLOv8 完成各类目标检测任务,帮助你快速上手并掌握 YOLO

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

python基础学习笔记(十三)

可以使用范围,比如‘[a-z]’能够匹配a到z的任意一个字符,还可以通过一个接一个的方式将范围联合起来使用,比如‘[a-zA-Z0-9]’能够匹配任意大小写字母和数字。因此,re.math(‘p’ , ‘python’)返回真,re.math(‘p’ , ‘www.python’) 则返回假。因此, 所需模式可以写成’python|perl’。r’w * \.python\.org’ 匹配 ‘www.python.org’ 、’.python.org’ 、’wwwwwww.python.org’

SherryJin的博客 271

基于FPGA的车道线检测系统设计

本文设计了一种基于FPGA的车道线检测系统,采用Altera Cyclone IV EP4CE10F17C8作为主控芯片,结合OV7725摄像头和LCD显示屏实现实时车道线检测。系统通过硬件流水线处理架构,依次完成图像采集、灰度转换、中值滤波、Sobel边缘检测和Hough变换直线识别等功能模块。所有模块均采用Verilog HDL实现,充分利用FPGA的并行处理能力,显著提升了系统响应速度。测试结果表明,该系统能够有效检测道路车道线,满足实时性要求,为ADAS系统提供了一种高效的硬件解决方案。

huanghm88的专栏 121

CloudCompare 二次开发:插件中的 PCL 环境配置与编程

在进行 CloudCompare 的二次开发过程中,我们常常需要使用点云库(Point Cloud Library,简称 PCL)来处理和分析点云数据。在 CloudCompare 的界面中,选中一个点云对象,然后点击菜单栏中的 “插件” -> “MyPluginAction”。插件将对选中的点云对象进行体素滤波处理,并更新显示结果。下面我们将展示一个简单的插件编程示例,该示例使用 PCL 对输入的点云数据进行体素滤波处理。方法进行体素滤波处理,并将结果点云赋值给选中的点云对象。文件并点击 “打开”。

2301_79331387的博客 283

Python模块 —— re正则表达式

正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,对于所有编程语言通用。对于Python来说我们使用re模块来操作正则表达式来匹配我们想要的结果。

julong187的博客 1525

三极管电平转换电路

摘要:本文介绍了三种基于三极管的电平转换电路方案。第一种采用双NPN三极管实现3.3V转5V反相电平转换;第二种使用单NPN三极管完成5V转3.3V同相转换;第三种利用单PNP三极管实现3.3V转5V同相转换。各方案均通过三极管的开关特性配合电阻网络实现电压域适配,具有结构简单、成本低的优点,适用于不同逻辑电平设备(如MCU与外设)间的信号兼容传输。文中详细分析了各电路的工作原理、元件作用和特性,并通过Multisim仿真验证了其功能有效性。

XU157303764的博客 1853

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

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

大音希声大象无形 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【Python】re模块

正则表达式其本身就是一种小型的,高度专业化的编程语言。在Python中,它被内 嵌在了re模块里面,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹 配引擎执行。

Linux小白一只~正处于学习阶段,觉得我写的还好的请多多给我点赞呀,谢谢大家!!(๑>ڡ<)☆ 4724

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

ZONGXP的博客 8159

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

正则表达式就是为了利用特殊符号,快速实现字符串的匹配,或者说是字符串的过滤1、表格12、表格2callable;def purge(): # 净化def template(pattern, flags=0): # 模板""""""else:else:s = []else:if c == 0:else:re的匹配语法有以下几种(pattern, string, flags=0):从头开始匹配re.search(pattern, string, flags=0) : 匹配包含。

2401_88244350的博客 1383

python基础教程之re模块详解

正则表达式是一个特殊的字符序列,能方便的检查一个字符串是否与某种模式匹配。re模块使得python拥有全部的正则表达式功能。

python03011的博客 7888

Python re 模块使用完全教程

re模块是 Python 标准库中处理正则表达式的核心工具,提供强大的文本模式匹配、搜索和替换功能。数据验证(邮箱/手机号格式校验)文本内容提取(日志分析/网页爬虫)批量文本处理(格式转换/敏感词过滤)复杂字符串操作(多条件分割/模板替换)正则表达式引擎基于 PCRE(Perl Compatible Regular Expressions)实现函数名称匹配范围返回类型适用场景性能特点re.match仅字符串开头Match/None格式校验快速失败re.search全局首次匹配。

YAnt的博客 2702

Python之re模块

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

m0_59485658的博客 2036

Python中re模块总结

Python中re模块总结 正则表达式作为计算机科学的一个概念,通常被用来检索、替换那些符合某个规则的文本。正则表达式是对字符串操作的一种逻辑公式,用事先定义好的规则字符串对字符串进行过滤逻辑处理。 re模块总结,正则表达式。在网络爬虫中对于数据定位,学习regex也很有必要 文章目录Python中re模块总结常用方法重要标识符常用表达式规则举例说明re.match(pattern, string, flags=0)re.search(pattern, string, flags=0)re.finda

北山啦的博客 4607

Python re模块详解

2. Python re模块2.0 re.flagsre.I 忽略大小写re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境re.M 多行模式re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库re.X 为了增加可读性,忽略...

Oliver_Hong的博客 4744

python内置模块【re正则表达式】

注意:re.S,可以匹配换行符。'wxy’匹配文本中的wxy。匹配文本中的a或b或c字符。匹配处理abc以外的字符。

m0_46926492的博客 2091

【python学习笔记】re模块(正则表达式)

目录 前言: re模块的主要方法 特殊符号与字符 re.compile方法 re.findall方法 re.sub方法 前言: 正则表达式(regex)是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 re模块的主要方法 Python自带的re模块主要包含如下6种方法: re.compile: 编译一个正则表达式模式(pattern); re.match: 从头开始匹配, 使用group()方法可以获取第一个匹配值; re.search: 用包含方.

是安澜啊 1888
上一篇: Python笔记(7)shelve模块
下一篇: Python笔记(9)文件
邓谦DQ
博客等级 码龄19年 14粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值