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 查找文件夹下所有文件 实现代码
Jul 01 Python
python基础教程之面向对象的一些概念
Aug 29 Python
在Python的Django框架的视图中使用Session的方法
Jul 23 Python
老生常谈Python基础之字符编码
Jun 14 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
python决策树之C4.5算法详解
Dec 20 Python
PyQt5每天必学之单行文本框
Apr 19 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
Python测试模块doctest使用解析
Aug 10 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
如何在python中实现随机选择
Nov 02 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 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
《魔兽争霸3:重制版》更新 多项视觉效果调整
2020/05/04 魔兽争霸
PHP实现多条件查询实例代码
2010/07/17 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python+mysql实现教务管理系统
2019/02/20 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
python集合删除多种方法详解
2020/02/10 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
基于 HTML5 Canvas实现 的交互式地铁线路图
2018/03/05 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
土木工程专业个人求职信
2013/12/30 职场文书
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
致长跑运动员广播稿
2014/01/31 职场文书
出纳担保书范文
2014/04/02 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python