re正则模块

python 爬虫4 - re模块(正则表达式) 正则表达式(Regular Expression,简称 Regex)是一种用于匹配字符串的模式。它可以用来搜索、替换、验证文本中的特定模式。Python 中的 re 模块提供了对正则表达式的支持。 阅读详情

python自1.5版本起增加了re模块,该模块提供了perl风格的正则表达式模式
re模块使python语言拥有了全部正则表达式的功能
四个函数
match()
search()
findall()
finditer()

match()函数

import re
'''
原型:def match(pattern, string, flags=0)
功能:尝试从字符串string的起始位置匹配一个pattern模式,如果不在起始位置匹配成功的话就返回None
参数:
    pattern:匹配的正则表达式
    string:要匹配的字符串
    flags:标志位,用于控制正则表达式的匹配方式(是否大小写、是否多行匹配)
        re.I   使匹配对大小写不敏感
        re.L   做本地化识别匹配
        re.M   多行匹配,影响^和$
        re.S   使.匹配包括换行符在内的所有字符
        re.U   根据Unicode字符集解析字符,影响\w、\W、\b、\B
        re.X   通过给予我们功能灵活的格式以便更好的理解正则表达式
'''
ret = re.match("www", "www.sunckwww.wang")
print(ret, type(ret))	#<_sre.SRE_Match object; span=(0, 3), match='www'> <class '_sre.SRE_Match'>
# print(ret.span())	#	(0, 3)
print(re.match("www", "http://www.sunck.wang"))	#None	

search函数

import re
'''
原型:def search(pattern, string, flags=0)
功能:扫描整个字符串string,并返回第一个pattern模式成功的匹配
参数:
    与match相同

'''

ret = re.search("www", "http://www.sunckwww.wang")
print(ret, type(ret))	#<_sre.SRE_Match object; span=(7, 10), match='www'> <class '_sre.SRE_Match'>
# print(ret.span())	#(7, 10)

findall()函数

import re
'''
原型:def findall(pattern, string, flags=0)
功能:扫描整个字符串string,并返回所有匹配pattern模式结果的列表

'''
rets = re.findall("www", "http://www.sunckwww.wang")
print(rets, type(rets))
#['www', 'www'] <class 'list'>
#w1   w2   w3   w4   w5   w6  w7  w8  w9   w0
# print(re.findall(r"w[1234567890]","wefw2sbreh4w5wqdgeweasegw0"))
['w2', 'w5', 'w0']

finditer函数

import re
'''
原型:def finditer(pattern, string, flags=0)
功能:类似findall,返回一个迭代器

区别:findall返回所有匹配的字符串,并存为一个列表,如果数据过多,占用大量内存。而finditer并不是直接返回找打的所有字符串,而是返回一个迭代器,可以通过next()迭代,节省内存
'''
ret = re.finditer("www", "http://www.sunckwww.wang")
print(ret, type(ret))	#<callable_iterator object at 0x000000000286A908> <class 'callable_iterator'>
for x in ret:
    print(x)
    #<_sre.SRE_Match object; span=(7, 10), match='www'>
#<_sre.SRE_Match object; span=(16, 19), match='www'>
    

正则表达式元字符

import re
'''匹配单个字符
.    匹配除换行符以外的任意字符,当flags被指定为re.S时,可以匹配包含换行符以内的所有字符,如果没有指定并且还匹配所有字符[.\n]
[]    里面是字符集合,匹配[]里任意一个字符
[0123456789]    匹配任意一个数字字符
[0-9]    匹配任意一个数字字符
[a-z]    匹配任意一个小写英文字母字符
[A-Z]    匹配任意一个大写英文字母字符
[a-zA-Z]     匹配任意一个英文字母字符
[a-zA-Z0-9]     匹配任意一个英文字母或数字字符
[^tom]    []里的^称为脱字符,表示非,匹配不在[]里的任意一个字符
\d    匹配任意一个数字字符,相当于[0-9]
\D    匹配任意一个非数字字符,相当于[^0-9]
\w    匹配字母、下划线、数字中任意一个[0-9a-zA-Z_]
\W    匹配非字母、下划线、数字中任意一个[^0-9a-zA-Z_]
\s    匹配空白符(空格、换页、换行、回车、制表),相当于[ \f\n\r\t]
\S    匹配非空白符(空格、换页、换行、回车、制表),相当于[^ \f\n\r\t]
'''
#w1   w2   w3   w4   w5   w6  w7  w8  w9   w0
print(re.findall(r"w\d","wefw2sbreh4w5wqdgeweaswegw0"))
#['w2', 'w5', 'w0']


'''锚字符
^    行首匹配,和[]中的^不是一个意思
$    行尾匹配
'''
print(re.search(r"^tom", "a tom is a good man"))
#None
print(re.search(r"man$", "tom is a good man"))
#<_sre.SRE_Match object; span=(14, 17), match='man'>
s = '''tom is a good man
tom is a nice man
tom is a handsoem man
tom is a cool man
'''
print(re.findall(r"^tom", s, re.M))
#['tom', 'tom', 'tom', 'tom']


'''边界字符
\A    匹配字符串开始,和^的区别是\A只匹配整个字符串的开头,即使在re.M模式下,也不会匹配其他的行首
\Z    匹配字符串结尾,和$的区别是\Z只匹配整个字符串的结尾,即使在re.M模式下,也不会匹配其他的行尾
\b    匹配一个单词的边界,值单词和空格的位置
\B    匹配非单词边界
'''
print(re.findall(r"\Atom", s, re.M))	#['tom']
print(re.findall(r"ck\b", "scktom ackessck"))#['ck']
print(re.findall(r"ck\B", "sucknackessck"))
#['ck', 'ck']


'''匹配多个字符
说明:以下使用x、y、z均为假设的普通字符,m、n表示一个数字,不是正则表达式的元字符
(xyz)    匹配括号内的xyz(作为一个整体去匹配)
x?    匹配0个或1个x,非贪婪匹配
x*    匹配0个或任意多个x
x+    匹配至少一个x
x{n}    匹配确定n个x,n是非负整数
x{n,}    匹配至少n个x
x{n,m}    匹配至少n个最多m个x
x|y    |表示或的意思,匹配x或y
'''
print(re.findall(r"(very)", "tom is a very very good man"))#['very', 'very']
print(re.findall(r"a?", "111a222aa33aaa4aaaa5aaaaa"))
#['', '', '', 'a', '', '', '', 'a', 'a', '', '', 'a', 'a', 'a', '', 'a', 'a', 'a', 'a', '', 'a', 'a', 'a', 'a', 'a', '']

print(re.findall(r"a*", "111a222aa33aaa4aaaa5aaaaa"))
#['', '', '', 'a', '', '', '', 'aa', '', '', 'aaa', '', 'aaaa', '', 'aaaaa', '']
print(re.findall(r"a+", "111a222aa33aaa4aaaa5aaaaa"))
#['a', 'aa', 'aaa', 'aaaa', 'aaaaa']
print(re.findall(r"a{3}", "111a222aa33aaa4aaaa5aaaaa6aaaaaa7aaaaaaa"))
#['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa']
print(re.findall(r"a{4,}", "111a222aa33aaa4aaaa5aaaaa6aaaaaa7aaaaaaa"))
#['aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa']
print(re.findall(r"a{2,4}", "111a222aa33aaa4aaaa5aaaaa6aaaaaa7aaaaaaa"))
#['aa', 'aaa', 'aaaa', 'aaaa', 'aaaa', 'aa', 'aaaa', 'aaa']
print(re.findall(r"((s|S)tom)", "aatomssstomeetom"))
#[('stom', 's')]

分组匹配

简单的判断是否匹配之外,正则表达式还有提取子串的功能,用()表示的就是要提取的分组
'''


# ret = re.search(r"(0\d{2,3})-(\d{8})", "aaa010-88888899bbb")
ret = re.search(r"(?P<quhao>0\d{2,3})-(?P<phone>\d{8})", "aaa010-88888899bbb")
print(ret)	#<_sre.SRE_Match object; span=(3, 15), match='010-88888899'>
#组的排序,从外到内,从左到右
#使用组序号获取匹配的字符串,0表示原数据
print(ret.group(0))	#010-88888899
print(ret.group(1))	#010
print(ret.group("quhao")) #可以根据组名获取组匹配的数据	#010
print(ret.group(2))	#88888899
print(ret.group("phone"))	#88888899
#查看匹配的各组的数据
print(ret.groups())	('010', '88888899')

编译正则表达式

import re

'''
概念:当在python中使用正则表达式时,re模块会做两件事,一件是编译正则表达式,如果表达式的字符串本身不合法,会报错。另一件是用编译后的正则表达式提取匹配字符串

编译优点:如果一个正则表达式要使用几千遍,每一次都会编译,处于效率的考虑进行正则表达式的编译,这样就不需要每次都编译,节省了编译时的时间,提升效率
'''


#编译正则表达式
'''
原型:def compile(pattern, flags=0)
功能:将pattern模式编译成正则对象
返回值:正则表达式对象
'''
re_phone = re.compile(r"(?P<quhao>0\d{2,3})-(?P<phone>\d{8})")
# re_phone = re.compile(r"(?P<quhao>0\d{2,3})-(?P<phone>\d{8})", re.I)

'''
原型:def findall(self, string, pos=0, endpos=-1)
参数:
    string:待匹配的字符串
    pos:从string字符串某个下标开始
    endpos:结束下标
def match(self, string, pos=0, endpos=-1)
def search(self, string, pos=0, endpos=-1)
def finditer(self, string, pos=0, endpos=-1)
'''
ret = re_phone.findall("aaa010-99999999bbb")
print(ret)
#[('010', '99999999')]

常用操作

  • 贪婪匹配
import re
'''
概念:匹配尽可能多的字符
'''
print(re.search(r"^(\d+)(0*)$", "1234056700000").groups())
#('1234056700000', '')
print(re.search(r"^(\d+?)(0*)$", "1234056700000").groups())
#('12340567', '00000')·

'''
尽可能匹配少的字符串称为非贪婪
*?
+?
'''

'''
/* part1 */  /* part2 */

'''

print(re.findall(r"//*.*/*/",r"/* part1 */  /* part2 */"))
#['/* part1 */  /* part2 */']
print(re.findall(r"//*.*?/*/",r"/* part1 */  /* part2 */"))
#['/* part1 */', '/* part2 */']
print(re.search(r"//*(.*)/*/",r"/* part1 */  /* part2 */").groups())
#('* part1 */  /* part2 *',)
print(re.search(r"//*(.*?)/*/",r"/* part1 */  /* part2 */").groups())
#('* part1 *',)
  • 字符串切割
import re

s = "tom#is$a%good&man"
# print(s.split("#"))
print(re.split(r"[#$%&]", s))
#['tom', 'is', 'a', 'good', 'man']

q = "tom  is    a     good    man"
# print(q.split(" "))
print(re.split(r" +", q))
#['tom', 'is', 'a', 'good', 'man']
  • 字符串替换与修改

s1 = "tom is a good man! tom is a nice man! tom is a cool man"
s2 = s1.replace("tom", "kagie")
print(s2)
#kagie is a good man! kagie is a nice man! kagie is a cool man

#将good、nice、cool都修改为handsome

import re
'''
def sub(pattern, repl, string, count=0, flags=0)
def subn(pattern, repl, string, count=0, flags=0)

作用:在目标字符串string中查找匹配的pattern模式的字符串,再把它们替换成指定的repl字符串,可以指定最多替换count次,否则替换所有

参数:
    pattern:正则表达式
    repl:指定用来替换的字符串
    string:目标字符串
    count:最多替换次数,默认为0表示所有
    
区别:
    sub返回一个别替换的字符串
    subn返回一个元组,元组第一个元素为被替换的字符串,第二个元素为放生了多少次替换
'''
s3 = "tom is a good man! tom is a nice man! tom is a cool man"
print(re.sub(r"(good)|(nice)|(cool)", "handsome", s3))
#tom is a handsome man! tom is a handsome man! tom is a handsome man
print(re.subn(r"(good)|(nice)|(cool)", "handsome", s3))
#('tom is a handsome man! tom is a handsome man! tom is a handsome man', 3)
Python必学模块之re模块(正则表达式)详解 文章目录一、什么是正则表达式二、re模块介绍三、常用正则表(元字符)3.1 \A,\z和^,$的区别四、re模块用法示例4.1 转义字符4.2 贪婪匹配和非贪婪匹配4.3 字符集[]和分组()的区别五、re模块的使用5.1 赋值变量重用5.2 直接使用六、re模块常用函数6.1 常用函数功能简介6.2 re.Match对象下的方法和属性6.3 常用函数代码实例七、re模块的常量(属性)八、练习题 ... 阅读详情

相关推荐

Python:正则表达式之re模块

1、前面介绍了Python中正则表达式的基本语法2、如果需要在Python中使用正则表达式来操作字符串的话,还需要使用到re模块 ⑴前面仅仅是介绍了正则表达式的定义语法,但如何通过定义的正则表达式来操作字符串还没有介绍 ⑵因此这里主要是介绍下re模块中的方法等1、re模块定义了12个函数2、这里简单介绍下各个函数的作用1、re模块中用于查找并返回一个匹配项的函数有3个:search()、match()、fullmatch()2、这三个函数虽然都只返回一个匹配项,但是在查找位置上稍微有点不一样

不怕猫的耗子A 1389

Python正则表达式re模块详解(新手必备超级详细一)

match(pattern,string,flags=0) 从被匹配字符串开头进行匹配,匹配成功返回匹配对象 (包含匹配的信息),匹配不成功返回空None。正则表达式本身也就是字符串,只是里面的字符都有特别的含义,分为:普通字符串,直接匹配它们,特殊字符(元字符),它们出现在正则表达式字符串中,不是表示直接匹配它们,而是表达一些特别的含义。

weixin_44230400的博客 4966

STM32F407 CanOpen主机实战:对象字典配置与多电机CIA402协议驱动详解

本文详细介绍了基于STM32F407的CanOpen主机开发实战,重点解析了对象字典的配置流程与多电机CIA402协议驱动方法。通过使用objdictedit工具配置SDO和PDO参数,并整合CanFestival协议栈,实现了对多个伺服电机的稳定同步控制。文章提供了从硬件连接到代码调试的完整指南,帮助开发者快速掌握工业现场的多轴运动控制技术。

plant的博客 530

Python 正则表达式使用--Re 模块详解

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

m0_67392931的博客 2348

大漠多线程增强版:解决窗口消失、坐标错乱与识别卡死

多线程环境下窗口自动化面临的核心挑战,本质是GDI资源非线程安全、HWND生命周期失控及图像引擎状态污染三大底层问题。Windows GUI编程中,跨线程共享hDC、缓存失效的窗口句柄、OpenCV静态Mat等设计缺陷,导致FindPic失败、GetCursorPos异常、坐标跳变等典型故障。本方案通过线程局部存储(TLS)重构资源生命周期、WinEventHook+心跳探测构建实时窗口状态链、ABI对齐的多语言内存契约,实现稳定低延迟的并发UI识别与控制。适用于游戏多开监控、电商RPA、后台UI状态采集等

weixin_30561177的博客 477

麒麟 ARMv10 SP3 安装 Oracle 19c 官方文档 或 教程

在麒麟ARMv10 SP3系统上安装Oracle 19c需要特别注意架构兼容性。

qq_43032338的博客 2941

正则表达式模块re及其应用

正则表达式是一种强大的文本处理工具,能够用来匹配、查找、替换复杂的文本模式。Python中的正则表达式由re模块提供。

KEEP CODING 1369

基于TKVA与深度学习的量子点微型光谱仪光谱重建改进算法研究

本文提出了一种融合深度学习的改进TKVA算法(TKVA-DL),用于提升量子点微型光谱仪的光谱重建精度。该方法创新性地结合深度先验网络与注意力机制,通过自适应学习光谱隐式先验替代传统固定正则化项,并动态加权探测器响应通道。实验表明,所提方法在仿真和实测数据上均显著优于传统TKVA及主流深度学习算法,RMSE降低35%,PSNR提升4.2 dB,同时保持物理可解释性。完整MATLAB实现验证了方法的有效性与可复现性,为微型光谱仪的高精度重建提供了新思路。 关键词:量子点微型光谱仪;光谱重建;Tikhonov正

AI的内部世界的博客 83

re模块(正则)

在线测试工具。

m0_58310590的博客 794

【机器学习】推理时计算优化——思维链(Chain-of-Thought)与慢思考范式 第一章:基础理论与认知框架 第二章:计算优化技术与前沿方法

过程监督在数学推理中展现出显著优势,因其能够定位错误发生的具体步骤,而非仅在最终答案处提供稀疏反馈。然而,高质量过程标注的获取成本高昂,这催生了基于自动验证器的近似方法。

VectorShift的博客 72

【DRAM存储器一】基本存储单元、阵列结构、读写原理

详述DRAM存储器存储单元、存储阵列结构和读写原理

highman110的博客 7256

python 正则模块(re)

1.正则表达式常见的具体应用场景如下: 手机号校验; 邮箱校验; 身份证校验; 网页标签匹配; 车牌号校验; 中文校验; 2.re模块 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。 1>元字符,量词,贪婪与非贪婪匹配,分组与或的使用 元字符: 字符 .

LAM1006_csdn的博客 992

但是我如果真的用差速轮去控制转向 为了尽量原地旋转 转向角度精确 我应该怎么去配置左右两个轮子的速度呢

目标实现方式原地转向左右轮速度相等、方向相反精确角度用 IMU 检测 yaw 实时对齐停止判断达到目标 yaw ± 容差时立即停转控制方式状态机(idle → turning → done)推荐容差2°~3° (可根据实际调整)

qqqweiweiqq的博客 312

python re正则模块

Python的re模块是处理正则表达式的核心工具,用于字符串匹配、查找、替换等文本操作。文章介绍了re模块的基础使用步骤、核心函数(match、search、findall、sub等)以及Match对象的常用方法。重点讲解了正则表达式元字符的含义和使用技巧,包括匹配模式、分组、标志位等。同时提供了性能优化建议和实际应用示例(如邮箱验证),并提醒注意贪婪匹配、原始字符串等常见问题。该模块通过预编译模式可提高效率,适合处理复杂的文本匹配需求。

Mr_Zhen的博客 956

【Python爬虫系列】_005.浏览器开发者工具(详解)

Elements(元素)分析当前页面节点,用来辅助书写BS或者XPath这里面的数据与源代码有区别,不一定准确(避坑)Console(控制台)这个除了查看错误信息、打印调试信息(console.log())、写一些测试脚本以外,还可以当作Javascript API查看用例如我想查看console都有哪些方法和属性,我可以直接在Console中输入"console"并执行后续学js逆向的时候需要用到Sources(源代码)与在网页页面,鼠标右键——查看网页源代码 内容一致。

weixin_50296259的博客 422

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python模块 —— re正则表达式

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

julong187的博客 1525

NTscan扫描工具

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

python正则模块—re

文章目录 一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$ 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$ 有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$ 有1~

雪辉博客 1025

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python正则模块re

python正则模块re 一.re模块内置的函数方法 re.compile(pattern, flags=0) https://cdn.analyticsvidhya.com/wp-content/uploads/2019/06/seq2seq.gif) re.compile()方法可以把一个正则表达式编译成一个正则对象(PatternObj),返回的正则对象是操作其他处理字符串方法的主体。 p...

聊伟的博客 533

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

ZONGXP的博客 8161

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

python 正则表达式re 模块的使用文章目录:一、re模块介绍1、re模块说明 我为什么要写这个博客,我又不搞爬虫,为什么,为什么,为什么? 就当证明我学过吧 !!! 一、re模块介绍 正则表达式就是为了利用特殊符号,快速实现字符串的匹配,或者说是字符串的过滤 1、re模块说明 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起...

求真、务实 1133

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

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

大音希声大象无形 1万+

python常用模块-re正则匹配

前言 re模块是python本地库中匹配字符串的模块,学习re模块的前提必须要学习一些基础的正则表达式,明白正则表达式中的一些概念,你才能更好的掌握这个模块。 正则表达式 常用元字符 元字符 匹配内容 . 匹配除换行符外的任意字符 \b 匹配单词的开始或结束 \d 匹配数字,等价于 [0-9]。 \s 匹配空白符,等价于 [ \f\n\r\t\v] \w 匹配字母或数字,等价于 “[A-Za-z0-9_]” ^ 匹配字符串的开始 $ 匹配字符串的结束 反义元字

如果没有梦想,那跟咸鱼有什么分别 5493

Python 正则表达式模块 re

flyfish

二分掌柜的 2866

Python学习心得正则表达式及re模块的使用

正则表达式

wjl112600的博客 2865
上一篇: 爬虫基础
下一篇: python爬虫之lxml框架
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值