python实现的正则表达式功能入门教程【经典】
发布时间 - 2026-01-11 01:43:54 点击率:次本文讲述了python实现的正则表达式功能。分享给大家供大家参考,具体如下:

前文:
首先,什么叫正则表达式(Regular Expression)?
例如我们要判断字符串"adi_e32fv,Ls"里面是否含有子串"e32f",又例如我们在一个含百万个姓名的txt文件中找姓“王”,名字以“五”结尾的名字,然后打印出来。结果为:“王五”、“王小五”、“王大五”、“王小小五”……
以前我们是使用字符串函数来查找的,但是代码实现起来会很复杂。如今用正则表达式只需要一句 re.findall('王.*?五',txt1) 就可以了!正则表达式是写网络爬虫的最基本的知识,可以用正则表达式在html中搜集满足某些字串要求的网址。下面是个人对正则表达式基础知识的一些总结。
(操作环境:32位Win8系统,运行工具:python2.7.9+Eclipse.)
正文:
1、首先要导入python的re模块。
2、元字符 . ^ $ * + ? {} [] \ | ()
re模块中的findall(str1,str2)方法返回字串str2中匹配str1格式的字串。例如在字符串'dit dot det,dct dit dot'中匹配'dit'结果为:
str1 = 'dit dot det,dct dit dot'
print re.findall('dit',str1)
结果:
['dit', 'dit']
|作用:'dit|dct'表示dit或者dct。
str1 = 'dit dot det,dct dit dot'
print re.findall('dit|dct',str1)
结果:
['dit', 'dct', 'dit']
[]作用:[ic]表示i或c,例如'd[ic]t'表示dit和dct两者,和'dit|dct'等价:
str1 = 'dit dot det,dct dit dot'
print re.findall('d[ic]t',str1)
结果:
['dit', 'dct', 'dit']
^作用一:[^ic]中^表示否定,即除了i和c:
str1 = 'dit dot det,dct dit dot'
print re.findall('d[^ic]t',str1)
结果:
['dot', 'det', 'dot']
^作用二:^dit表示子串dit在开头位置,而dct不是在开头:
str1 = 'dit dot det,dct dit dot'
print re.findall('^dit',str1)
print re.findall('^dct',str1)
结果:
['dit'][]
$作用:dot$表示子串dot要在末尾位置,而dct不是在末尾:
str1 = 'dit dot det,dct dit dot'
print re.findall('dot$',str1)
print re.findall('dct$',str1)
结果:
['dot'][]
.作用:d.t表示d与t之间省略了一个任意字符:
str1 = 'dit dot det,dct dit dot'
print re.findall('d.t',str1)
结果:
['dit', 'dot', 'det', 'dct', 'dit', 'dot']
+作用:di+t表示d与t之间省略了一个或多个'i':
str1 = 'd dt dit diit det'
print re.findall('d.+t',str1)
结果:
['dit', 'diit']
*作用:di*t表示d与t之间省略了零个至多个'i':
str1 = 'd dt dit diit det'
print re.findall('d.*t',str1)
结果:
['dt', 'dit', 'diit']
经常,'.'和'+'或者'*'搭配使用。'.+'表示省略了一个至多个任意元素,'.*'表示省略了零个至多个任意元素:
str1 = 'd dt dit diit det'
print re.findall('d.+t',str1)
print re.findall('d.*t',str1)
结果:
['d dt dit diit det']['d dt dit diit det']
?作用一:看.+的匹配结果,'dit'、'dot'也满足'd.+t'的匹配条件,而输出的却是满足匹配条件的最长子串'dit dot det,dct dit dot',这个叫贪婪匹配。如果要输出最短的匹配字串,只需在'+'后面加上'?':(注:对于'*'也是一样,只需在'*'后面加上'?')
str1 = 'd dt dit diit det'
print re.findall('d.+?t',str1)
结果:
['dit', 'dot', 'det', 'dct', 'dit', 'dot']
?作用二:di?t表示i可有可无,即dt、dit都满足匹配条件:
str1 = 'd dt dit diit det'
print re.findall('di?t',str1)
结果:
['dt', 'dit']
{}作用一:di{n}t表示d和t之间有n个'i':
str1 = 'dt dit diit diiit diiiit'
print re.findall('di{2}t',str1)
结果:
['diit']
{}作用二:di{n,m}t表示d和t之间有n到m个'i':
str1 = 'dt dit diit diiit diiiit'
print re.findall('di{1,3}t',str1)
结果:
['dit', 'diit', 'diiit']
其中,n和m都是可以省略的。{n,}表示n个到任意个;{,m}表示0个到m个;{,}表示任意个,和'*'功能一样:
str1 = 'dt dit diit diiit diiiit'
print re.findall('di{1,}t',str1)
print re.findall('di{,3}t',str1)
print re.findall('di{,}t',str1)
结果:
['dit', 'diit', 'diiit', 'diiiit'] ['dt', 'dit', 'diit', 'diiit'] ['dt', 'dit', 'diit', 'diiit', 'diiiit']
\作用一:取消元字符,变成转义字符:
str1 = '^abc ^abc'
print re.findall('^abc',str1)
print re.findall('\^abc',str1)
结果:
[]['^abc', '^abc']
\作用二:预定义字符
str1 = '12 abc 345 efgh'
print re.findall('\d+',str1)
print re.findall('\w+',str1)
结果:
['12', '345'] ['12', 'abc', '345', 'efgh']
()作用:在匹配字符串后,只输出匹配字串'()'里面的内容:
str1 = '12abcd34'
print re.findall('12abcd34',str1)
print re.findall('1(2a)bcd34',str1)
print re.findall('1(2a)bc(d3)4',str1)
结果:
['12abcd34']
['2a']
[('2a', 'd3')]
3、re模块里的主要方法:findall()、finditer()、match()、search()、compile()、split()、sub()、subn()。
re.findall(pattern,string,flags = 0)
作用:在string中从左往右搜索与pattern匹配的字串,结果以list形式返回。
str1 = 'ab cd'
print re.findall('\w+',str1)
结果:['ab', 'cd']
re.finditer(pattern,string,flags = 0)
作用:其功能与re.findall相同,但结果以迭代器的形式返回。
str1 = 'ab cd'
iter1 = re.finditer('\w+',str1)
for a in iter1:
print a.group(),a.span()
结果:
ab (0, 2)
cd (3, 5)
(注:a.group()返回满足匹配调节的字串,a.span()返回字串的起始位置和末尾位置)
re.search(pattern,string,flags = 0)
作用:在string中从左往右搜索与pattern匹配的字串,无匹配结果则返回None,否则返回一个search实例。
str1 = 'ab cd'
result = re.search('cd',str1)
if result == None:
print 'None'
else:
print result.group(),result.start(),result.end()
结果:cd 3 5
re.match(pattern,string,flags = 0)
作用:判断string的头部是否与pattern匹配,是则返回match实例,否则返回None。
str1 = 'ab cd'
result = re.match('cd',str1)
if result == None:
print 'None'
else:
print result.group(),result.start(),result.end()
结果:None
re.compile(pattern,flags = 0)
作用:对匹配格式pattern进行编译,返回一个实例对象。对正则表达式先编译,可以大幅提高匹配速度。
str1 = 'ab cd'
pre = re.compile('ab')
print pre.findall(str1)
结果:['ab']
re.split(pattern,string,maxsplit = 0,flags = 0)
作用:在string匹配pattern的时候做分割:
str1 = 'ab.c.de'
str2 = '12+34-56*78/90'
print re.split('\.',str1)
print re.split('[\+\-\*/]',str2)
结果:
['ab', 'c', 'de']
['12', '34', '56', '78', '90']
re.sub(pattern,repl,string,count = 0,flags = 0)
作用:在string当中把满足pattern正则的字串替换成repl:
str1 = 'abcde'
print re.sub('bc','123',str1)
结果:a123de
re.subn(pattern,repl,string,count = 0,flags = 0)
作用:其功能与re.sub()相同,但返回的结果多了一个数字,代表替换了多少次
str1 = 'abcdebce'
print re.subn('bc','123',str1)
结果:('a123de123e', 2)
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools./regex/javascript
正则表达式在线生成工具:
http://tools./regex/create_reg
更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# python
# 正则表达式
# python使用正则表达式替换匹配成功的组
# 教你学会使用Python正则表达式
# Python使用中文正则表达式匹配指定中文字符串的方法示例
# 详解python里使用正则表达式的全匹配功能
# Python中正则表达式的详细教程
# Python实现正则表达式匹配任意的邮箱方法
# 字串
# 是在
# 只需
# 往右
# 小五
# 都是
# 进阶
# 操作技巧
# 是个
# 相关内容
# 却是
# 一句
# 多个
# 可以用
# 要在
# 数据结构
# 给大家
# 可有可无
# 只需要
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在阿里云香港服务器快速搭建网站?
如何在阿里云购买域名并搭建网站?
微信小程序 配置文件详细介绍
微信公众帐号开发教程之图文消息全攻略
免费网站制作appp,免费制作app哪个平台好?
微信小程序 input输入框控件详解及实例(多种示例)
如何在腾讯云服务器快速搭建个人网站?
高防服务器租用如何选择配置与防御等级?
Laravel怎么实现验证码(Captcha)功能
php打包exe后无法访问网络共享_共享权限设置方法【教程】
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
JS经典正则表达式笔试题汇总
如何在云主机上快速搭建网站?
Swift开发中switch语句值绑定模式
如何在宝塔面板创建新站点?
如何挑选优质建站一级代理提升网站排名?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
如何在万网主机上快速搭建网站?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Mybatis 中的insertOrUpdate操作
5种Android数据存储方式汇总
如何在云指建站中生成FTP站点?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
如何注册花生壳免费域名并搭建个人网站?
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
jquery插件bootstrapValidator表单验证详解
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Android Socket接口实现即时通讯实例代码
如何有效防御Web建站篡改攻击?
PythonWeb开发入门教程_Flask快速构建Web应用
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
php 三元运算符实例详细介绍
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
利用vue写todolist单页应用
如何做网站制作流程,*游戏网站怎么搭建?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Python3.6正式版新特性预览
如何挑选高效建站主机与优质域名?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
如何快速搭建高效WAP手机网站?

