Python正则表达式经典入门教程
发布时间 - 2026-01-11 01:13:51 点击率:次本文实例总结了Python正则表达式基本用法。分享给大家供大家参考,具体如下:

正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到。一般我们会使用到Python的re库。如果正则表达式自己代码中反复被用到的时候,我们可以将这个正则表达式使用re.compile函数转换成一个object方便调用。
match
将输入的字符串从第一个字符开始匹配,如果不匹配将会直接返回空。
search
和match不同,search能自由的在字符串中任一开始位置开始匹配,直到匹配上了。
re中的选项
通常在flag里面可以设置.
re.I 忽略掉大小写
re.L 让\w,\W,\b,\B,\s和\S做本地化识别
re.M 当匹配的时候支持多行匹配.
re.DEBUG 显示正则表达式的调试信息
re.S 让.号匹配本行的全部字符。
sub 替换
import re phone='188-88-88 # this is my phone number' num = re.sub(r'#.*$','',phone) # num ==188-88-88 num = re.sub(r'\D','',phone) # num = 1888888
还能使用这个来做代码的转义,有点像在 sublime text里面使用的查找替换。比如说我需要将C语言里面的宏定义转换成lua里面的变量定义
import re print( re.sub( r'#define\s+([a-zA-Z_]+)\s+([a-zA-Z_0-9]+)', r'_G.\1 = \2', '#define MAX_RECV_SIZE 100' ) ) #_G.MAX_RECV_SIZE = 100
subn函数类似,只是能定制替换的次数。
findall
将匹配到的内容返回成一个数组,这个应该是比较常用的方法。
print( re.findall( '\d+', '66,88,88,777' ) ) # ['66', '88', '88', '777']
finditer
匹配的内容以迭代器的方式返回,我们可以对这个做循环,返回的时候MatchObject
for num in re.finditer( '\d+', '66,88,88,777' ): print num.group() ''' 66 88 88 777 '''
split
re.split(pattern, string, maxsplit=0, flags=0)
>>> re.split(',', 'Words, words, words.')
['Words', ' words', ' words.']
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
大写的\W表示了非字串,这个在语法里面可以查到。如果加了括号,将不会省略掉匹配到的split的字串。最后这个在数组中作为字串分隔符的,.都被保留在数组中了。
escape
这个函数是一个辅助函数,当大量编写正则表达式的时候,可能我们固定的一些字串中包含了正则的保留字串,但是我们不需要让程序当它是re表达式的时候,可以使用这个函数将字串做转换。
re.escape('1234@gmail.com')
# result
1234\\@gmai\\.com
备注语法:
| 模式 | 描述 |
|---|---|
| ^ | 匹配字符串的开头 |
| $ | 匹配字符串的末尾。 |
| . | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
| […] | 用来表示一组字符,单独列出:[amk] 匹配 ‘a','m'或'k' |
| [^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
| re* | 匹配0个或多个的表达式。 |
| re+ | 匹配1个或多个的表达式。 |
| re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式re{ n} |
| re{ n,} | 精确匹配n个前面表达式。 |
| re{ n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式a |
| (re) | G匹配括号内的表达式,也表示一个组 |
| (?imx) | 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 |
| (?-imx) | 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 |
| (?: re) | 类似 (…), 但是不表示一个组 |
| (?imx: re) | 在括号中使用i, m, 或 x 可选标志 |
| (?-imx: re) | 在括号中不使用i, m, 或 x 可选标志 |
| (?#…) | 注释. |
| (?= re) | 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 |
| (?! re) | 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功 |
| (?> re) | 匹配的独立模式,省去回溯。 |
| \w | 匹配字母数字 |
| \W | 匹配非字母数字 |
| \s | 匹配任意空白字符,等价于 [\t\n\r\f]. |
| \S | 匹配任意非空字符 |
| \d | 匹配任意数字,等价于 [0-9]. |
| \D | 匹配任意非数字 |
| \A | 匹配字符串开始 |
| \Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c |
| \z | 匹配字符串结束 |
| \G | 匹配最后匹配完成的位置。 |
| \b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b' 可以匹配”never” 中的 ‘er',但不能匹配 “verb” 中的 ‘er'。 |
| \B | 匹配非单词边界。'er\B' 能匹配 “verb” 中的 ‘er',但不能匹配 “never” 中的 ‘er'。 |
| \n, \t, 等. | 匹配一个换行符。匹配一个制表符。等 |
| \1…\9 | 匹配第n个分组的子表达式。 |
| \10 | 匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。 |
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools./regex/javascript
正则表达式在线生成工具:
http://tools./regex/create_reg
更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 正则表达式
# 比较详细Python正则表达式操作指南(re使用)
# python正则表达式re模块详细介绍
# Python 匹配任意字符(包括换行符)的正则表达式写法
# 零基础写python爬虫之神器正则表达式
# Python 中文正则表达式笔记
# Python正则表达式匹配ip地址实例
# python正则表达式match和search用法实例
# python使用正则表达式提取网页URL的方法
# Python中正则表达式的用法实例汇总
# python正则表达式中的括号匹配问题
# python正则表达式去掉数字中的逗号(python正则匹配逗号)
# python中正则表达式的使用详解
# 字串
# 可选
# 所含
# 多个
# 我们可以
# 转换成
# 换行符
# 使用这个
# 前向
# 换行
# 是一个
# 进阶
# 操作技巧
# 相关内容
# 第一个
# 也就
# 将会
# 上了
# 还能
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能
php485函数参数是什么意思_php485各参数详细说明【介绍】
清除minerd进程的简单方法
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
Laravel怎么使用artisan命令缓存配置和视图
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何注册花生壳免费域名并搭建个人网站?
JavaScript如何实现错误处理_try...catch如何捕获异常?
魔方云NAT建站如何实现端口转发?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel如何使用Telescope进行调试?(安装和使用教程)
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册
如何在不使用负向后查找的情况下匹配特定条件前的换行符
PythonWeb开发入门教程_Flask快速构建Web应用
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
微信小程序 HTTPS报错整理常见问题及解决方案
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
网页设计与网站制作内容,怎样注册网站?
如何在IIS7上新建站点并设置安全权限?
如何快速完成中国万网建站详细流程?
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
Mybatis 中的insertOrUpdate操作
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel如何记录自定义日志?(Log频道配置)
绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信
Laravel如何实现API资源集合?(Resource Collection教程)
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Python3.6正式版新特性预览
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
如何快速选择适合个人网站的云服务器配置?

