Python模块 正则表达式 re模块的使用与实例

本文介绍了Python的re模块,讲解了如何使用正则表达式进行匹配、替换和分隔字符串。重点包括模式对象、编组、修饰符以及具体的实例,如查找URL、提取HTML标签内容和模板替换等。
摘要由CSDN通过智能技术生成

很喜欢Python教材中的这句格言:
有些人面临问题时会想:“我知道, 我将使用正则表达式来解决这个问题.”
这让他们面临的问题变成了两个.
---------Jamie Zawinski
正则表达式的确好用,但是复杂的模式难以阅读和维护,与其把花在研究用正则表达式处理复杂的问题上,还不如把时间花在如何写一套清晰,易维护的逻辑上(但是为什么要用,还是因为爽啊)
关于正则表达式的语法,可以参阅我的这篇[学习笔记]正则表达式语法与使用速查

re模块


“我觉得学习是一个循序渐进的过程,所以我不一次性列出所有的函数,这里只列出例子要用的函数.”

函数 描述
compile(pattern,[, flags]) 根据包含正则表达式的字符串创建模式对象
search(pattern,string[, flags]) 在字符串中查找模式
sub(pat, repl, string[, count=0]) 对字符串中域模式pat匹配的子串都替换为repl

函数re.compile()将字符串表示的正则表达式转换为模式对象,提高匹配效率,调用re.search()等函数时,如果使用的是字符串表示的正则表达式,会在内部先转换为模式对象再使用.如果转为模式对象后,则后面每次使用正则表达式都无需进行转换.即re.search(pat,string)等价于pat.search(string)

例如查找"http://www.python.org"中的python并替换为java

import re
line="http://www.python.org"
pat="(?<=\.).+(?=\.)" #两个.之间的内容
patobj=re.compile(pat) #创建模式对象
print(re.search(pat, line))
print(re.search(patobj, line)) #正则表达式与模式对象都能使用
print(patobj.search(line))  
#输出结果
<re.Match object; span=(11, 17), match='python'>
<re.Match object; span=(11, 17), match='python'>
<re.Match object; span=(11, 17), match='python'>

函数re.search在给定字符串中查找第一个与指定pat匹配的子串,如果找到将返回MatchObject(结果为True),否则为None.(结果为False)
观察结果<re.Match object; span=(11, 17), match='python'>,发现MatchObject的匹配子串为'python',起始与终止位置为11,17

替换为java

line1 = re.sub(pat, "java", line) 
line2 = patobj.sub("java", line) 
print(line1)
print(line2)
#输出结果
http://www.java.org
http://www.java.org
函数 描述
match(pattern, string,[, flags]) 在字符串开头匹配模式
split(pattern, string,[, maxsplit=0]) 根据模式来分割字符串
findall(pattern, string) 返回一个列表,其中包含字符串中所有与模式匹配的子串

函数re.match尝试在给定字符串开头查找与正则表达式匹配的子串,和re.search相似,如果找到这样的子串,返回MatchObject,否则返回None
另外,re.match在模式与字符串开头匹配时就返回True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值