python正则表达式及使用正则表达式的例子


Posted in Python onJanuary 22, 2018

正则表达式

正则表达用来匹配字符串

正则表达式匹配过程

  1. 依次拿出表达式和文本中的字符串进行比价
  2. 如果每个字符都能匹配,则匹配成功;一旦有匹配不成功的字符,则匹配失败
  3. 如果有量词和边界,则匹配过程稍微有些不同

正则表达式语法规则

语法 说明 表达式实例 匹配字符串
字符
. 匹配除换行"\n"外的任意字符串 abc abc
\ 转义字符,使后一个字符改变原来的意思 a\\c a\c
[...] 字符集,对应的位置可以是字符集中任意字符,字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是^则表示取反,如[^abc]表示不是abc中的其他字符。所有的特殊的字符在字符集中都失去其原有的特殊含义。在字符集中使用^、]或-,可以使用转义字符匹配它们 a[bcd]e abe ace ade
预定义字符集
\d 数字:[0-9] a\dc a1c
\D 非数字:[^0-9] a\Dc abc
\s 空白字符:[\t\r\n\f\v] a\sc a c
\S 非空白字符:[^\s] a\Sc abc
\w 单词字符:[a-zA-z0-9_] a\wc abc
\W 非单词字符:[^\w] a\Wc a c
数量词
* 匹配一个字符串0或无限次 abc* ab abc abccc
+ 匹配一个字符串1次或无限次 abc+ abc abccc
? 匹配一个字符串0次或1次 abc? ab abc
{m} 匹配一个字符串m次 abc{2} abcc
{m,n} 匹配一个字符串m到n次 abc{2,3} abcc abccc
边界匹配
^ 匹配字符串开头 ^abc abc
$ 匹配字符串末尾 abc$ abc
\A 匹配字符串开始 \Aabc abc
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 abc\Z abc
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
逻辑分组
| 匹配|表达式左右的任意一个 abc|def abc def
(...) 作为分组,每遇到一个(,分组编号加1,使用分组的好处是匹配的子串会保存到一个子组,便于以后使用 (abc){2} abcabc
(?P...) 分组除原有编号外,再加一个别名 (?Pabc){2} abcabc
\ 引用编号为number的分组匹配到的字符串 (\d)ab\1 1ab1 5ab5
(?P=name) 应用别名为name的分组匹配到的字符串 (?Pabc)ee(?P=name) abceeabc
特殊构造(不分组)
(?:...) (...)的不分组版本,用于|或后接数量词 (?:abc){2} abcabc
(?iLmsux) iLmsux中的每个字符代表正则表达式的一种匹配模式,只能用在正则表达式开头,可选多个 (?i)abc AbC
(?#...) 将#后面的字符当做注释忽略 abc(?#comment)def abcdef
(?=...) 之后的字符串表达式需要匹配才能成功,不消耗字符串内容 a(?=\d) 后面是数字的a
(?!...) 之后的字符串表达式需要不匹配才能成功,不消耗字符串内容 a(?!\d) 后面不是数字的a
(? 之前的字符串表达式需要匹配才能成功,不消耗字符串内容 (? 前面是数字的a
(? 之前的字符串表达式需要不匹配才能成功,不消耗字符串内容 (? 前面不是数字的a
(?(id/name)yes_ pattern|no_parttern) 如果匹配到分组为id或别名name的字符串成功匹配,则需要匹配yes_pattern 不成功,怎需要匹配no_pattern (\d)abc(?(1)\d|def) 1abc3 abcdef

贪婪模式和非贪婪模式

贪婪模式是尽可能多的匹配字符串,python默认为贪婪模式,非贪婪模式尽可能少的匹配字符串,在正则表达式后面加个?表示非贪婪模式。例如:字符串abcccb,贪婪模式正则表达式为ab.*c,非贪婪模式的正则表达式为ab.*?c,贪婪模式结果为abccc,非贪婪模式结果为abc,再比如字符串abbb,贪婪模式正则表达式为ab?,非贪婪模式正则表达为ab??,贪婪模式结果为ab,非贪婪结果为a。

python的re模块

re模块的方法:

1.compile(pattern[,flag]):对正则表达式pattern进行编译,编译后比直接查找速度快

2.match(patter,string[,flag]):从字符串string的开始就匹配,若匹配成功,则返回匹配对象,否则返回None(None对象没有group()和groups()方法,不判断直接调用这两个方法,则会出现异常)

3.search(pattern,string[,flag]):从字符串中查找,若匹配成功,则返回匹配对象,否则返回None

4.findall(pattern,string[,flag]):在字符串 string 中查找正则表达式模式 pattern 的所有(非重复)出现;返回一个匹配对象的列表

5.finditer(pattern,string[, flags])b 和 findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象

6.split(pattern,string, max=0) 根据正则表达式 pattern 中的分隔符把字符 string 分割为一个列表,返回成功匹配的列表,最多分割 max 次(默认是分割所有匹配的地方)

7.sub(pattern, repl, string, max=0) 把字符串 string 中所有匹配正则表达式 pattern 的地方替换成字符串 repl,如果 max 的值没有给出, 则对所有匹配的地方进行替换

匹配对象的方法和属性:

  1. string:匹配时所使用的文本
  2. re:匹配时使用的pattern对象
  3. group(num=0) 返回全部匹配对象(或指定编号是 num 的子组)
  4. groups() 返回一个包含全部匹配的子组的元组(如果没有成功匹配,就返回一个空元组)

参数flag:

re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

python使用正则表达式的例子

>>> import re
>>> pattern = re.compile(r'foo')
>>> res1 = re.search(pattern,'foo')
>>> res1.group() # 返回的是匹配对象,需要调用group()方法,显示所有的匹配对象
'foo'
>>> res1.groups()# 因为没有子组(即正则表达式中没有分组),返回空元组
()
>>> res2 = re.findall(pattern,'foobbfoo')
>>> res2 # 直接返回的是一个列表,包含所有匹配的字符
['foo', 'foo']
>>> pattern2 = re.compile(r'(\d+)aa')
>>> res3 = re.search(pattern2,'bb32aa')
>>> res3.group() # 返回所有的匹配的对象
'32aa'
>>> res3.groups() # 对比res1的groups(),正则里有分组,返回匹配到的分组
('32',)
>>> res4 = re.findall(pattern2,'bb32aacc5aacc')
>>> res4 # 对比res2,返回一个列表,但只包含所匹配分组里面的字符,
['32', '5']

总结

以上所述是小编给大家介绍的python正则表达式及使用正则表达式的例子,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中删除文件的程序代码
Mar 13 Python
python之wxPython菜单使用详解
Sep 28 Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
Python实现统计代码行的方法分析
Jul 12 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
Mar 04 Python
Python深度优先算法生成迷宫
Jan 22 #Python
Python使用Tkinter实现机器人走迷宫
Jan 22 #Python
Python实现简单文本字符串处理的方法
Jan 22 #Python
Python简单实现控制电脑的方法
Jan 22 #Python
Zookeeper接口kazoo实例解析
Jan 22 #Python
Python调用C语言的方法【基于ctypes模块】
Jan 22 #Python
python的Crypto模块实现AES加密实例代码
Jan 22 #Python
You might like
仿Aspnetpager的一个PHP分页类代码 附源码下载
2012/10/08 PHP
php实现可用于mysql,mssql,pg数据库操作类
2014/12/13 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
vue组件的写法汇总
2018/04/12 Javascript
Vue中的作用域CSS和CSS模块的区别
2018/10/09 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
详解几十行代码实现一个vue的状态管理
2019/01/28 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
python计算牛顿迭代多项式实例分析
2015/05/07 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
Python爬虫破解登陆哔哩哔哩的方法
2020/11/17 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
2021/02/24 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
Intersport西班牙:在线体育商店
2019/11/06 全球购物
编写strcpy函数
2014/06/24 面试题
课堂教学改革实施方案
2014/03/17 职场文书
委托书的写法
2014/09/16 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
给客户的检讨书
2014/12/21 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang