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 list 合并连接字符串的方法
Mar 09 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
python版本单链表实现代码
Sep 28 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
python如何把字符串类型list转换成list
Feb 18 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
Django实现内容缓存实例方法
Jun 30 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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
php 接口类与抽象类的实际作用
2009/11/26 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php抽象类用法实例分析
2015/07/07 PHP
jquery默认校验规则整理
2014/03/24 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
使用JavaScript实现ajax的实例代码
2016/05/11 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
简析Python的闭包和装饰器
2016/02/26 Python
Python 文件处理注意事项总结
2017/04/10 Python
Python判断有效的数独算法示例
2019/02/23 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
简单了解如何封装自己的Python包
2020/07/08 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
童装店创业计划书
2014/01/09 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android