栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

正则表达式——5.MatchObject对象、sub()方法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

正则表达式——5.MatchObject对象、sub()方法

1.re.match()

目前已经学习了搜寻字符串中最重要的2个方法re.search()和re.findall(),re模块另一个方法是re.match(),这个方法其实和re.match()相同,差异是re.match()只搜寻比对字符串开始的字符,如果失败就算失败,re.search()则是搜寻整个字符串。至于re.match()搜寻成功会回传MatchObject对象,若是搜寻失败会回传None,这部分与re.search()相同。

re.match()的应用:测试1是将John放在被搜寻字符串的最前面,测试2没有将John放在被搜寻字符串的最前面。

import re

# 测试1搜寻使用re.match()
msg1 = 'John will attend my party tonight.'  # John是第一个字符串
pattern = 'John'
txt1 = re.match(pattern, msg1)
if txt1 != None:
    print("测试1输出: ", txt1.group())
else:
    print("测试1搜寻失败")

# 测试2搜寻使用re.match()
msg2 = 'My best friend is John.'  # John不是第一个字符串
txt2 = re.match(pattern, msg2, re.DOTALL)
if txt2 != None:
    print("测试2输出: ", txt2.group())
else:
    print("测试2搜寻失败")
2.MatchObject几个重要的方法

当使用re.search()或re.match()搜寻成功时,会产生MatchObject对象。

通过一个实例来看看MatchObject对象是什么。

import re

# 测试1搜寻使用re.match()
msg = 'John will attend my party tonight.'
pattern = 'John'
txt1 = re.match(pattern, msg)
if txt1 != None:
    print("使用re.match()输出MatchObject对象: ", txt1)
else:
    print("测试1搜寻失败")

# 测试1搜寻使用re.search()
txt2 = re.search(pattern, msg)
if txt2 != None:
    print("使用re.search()输出MatchObject对象: ", txt2)
else:
    print("测试1搜寻失败")

从上述可知,当使用re.match()和re.search()皆搜寻成功时,两者的MatchObject对象内容是相同的。span是注明成功搜寻字符串的起始位置和结束位置。从此处可以知道起始索引位置是0,结束索引位置是4。match则是注明成功成功搜寻的字符串内容。

 取得MatchObject对象内容的重要方法:

方法说明
group()可回传搜寻到的字符串,本章已有许多实例说明
end()可回传搜寻到的字符串的结束位置
start()可回传搜寻到的字符串的起始位置
span()可回传搜寻到的字符串的(起始,结束)位置
import re

# 测试1搜寻使用re.match()
msg1 = 'John will attend my party tonight.'
pattern = 'John'
txt1 = re.match(pattern, msg1)
if txt1 != None:
    print("搜寻成功字符串的起始索引位置: ", txt1.start())
    print("搜寻成功字符串的结束索引位置: ", txt1.end())
    print("搜寻成功字符串的起始索引位置: ", txt1.span())

# 测试2搜寻使用re.search()
msg2 = 'My best friend is John.'
txt2 = re.search(pattern, msg2)
if txt2 != None:
    print("搜寻成功字符串的起始索引位置: ", txt2.start())
    print("搜寻成功字符串的结束索引位置: ", txt2.end())
    print("搜寻成功字符串的结束索引位置: ", txt2.span())

 

 3.抢救CIA情报员——sub()方法

Python re模块内的sub()方法可以用新的字符串取代原本字符串的内容。

sub()方法的基本使用语法如下:

result = re.sub(pattern, newstr, msg)  # msg是整个欲处理的字符串或句子

pattern是欲搜寻的字符串,如果搜寻成功则用newstr取代,同时成功取代的结果回传给result变量,如果搜寻到多个相同字符串,这些字符串将全部被取代,须留意原先msg内容将不会改变。

字符串取代的应用实例:测试1是发现2个字符串被成功取代,同时列出取代结果。测试2是取代失败,所以txt与原msg内容相同。

import re

# 测试1取代使用re.sub()结果成功
msg = 'Eli Nan will attend my party tonight. My best friend is Eli Nan.'
pattern = 'Eli Nan'  # 欲搜寻的字符串
newstr = 'Kevin Thomson'  # 新字符串
txt = re.sub(pattern, newstr, msg)
if txt != msg:  # 如果txt与msg内容不同表示取代成功
    print("取代成功: ", txt)
else:
    print("取代失败: ", txt)  # 列出失败的取代结果

# 测试2取代使用re.sub()结果失败
pattern = 'Eli Thomson'  # 欲搜寻的字符串
txt = re.sub(pattern, newstr, msg)
if txt != msg:  # 如果txt与msg内容不同表示取代成功
    print("取代成功: ", txt)
else:
    print("取代失败: ", txt)

 例如,情报机构在内部文件不可直接将情报员的名字列出来,历史上太多这类实例造成情报员的牺牲,这时可以用*** 代替原本的姓名。使用Python的正则表示法,可以轻松协助我们执行这方面的工作。

将CIA情报员名字用名字第一个字母和***取代。

import re

# 使用隐藏文字执行取代
msg = 'CIA Mark told CIA Linda that secret USB had given to CIA Peter.'
pattern = r'CIA (w)w*'  # 欲搜寻CIA + 空一格后的名字
newstr = r'1***'  # 新字符串使用隐藏文字
txt = re.sub(pattern, newstr, msg)
print("取代成功: ", txt)

 

pattern = r'CIA (w)w*'  # 欲搜寻CIA + 空一格后的名字

 (w)代表必须只有一个字符,同时小括号代表这是一个分组(group),由于整行只有一个括号所以知道这是第一分组,同时只有一个分组,括号外的w*表示可以有0到多个字符。所以(w)w*相当于是1到多个字符组成的单词,同时存在分组1.

newstr = r'1***'  # 新字符串使用隐藏文字

1代表用分组1找到的第一个字母当作字符串开头,后面*** 则是接在第一个字母后面的字符。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1037500.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号