python正则表达式模块re简介

re模块常用的一些功能有: re.match, re.compile, re.search, re.findall,re.finditer,re.sub, re.split

这里分别做简单的介绍,便于以后查询使用

1. re.match

re.match是re模块的一个基本方法,理解了该方法再去看其它方法便不难了

基本格式:

1  re.match(pattern, string, flags=0)

pattern是匹配模式,string是你要用正则表达式处理的字符串,flags是pattern和string匹配的方式。

什么是匹配模式呢,这得先说一下什么是正则表达式,个人理解,正则表达式就是你要以不同的“方法”去获取一个字符串内特定的信息。比如说,获取字符串某个位置(如首尾)的字符、某类数字或单词等等。而这个“方法”,就是匹配模式,也就是re.match里的pattern。匹配模式在不同平台上的格式还是比较统一的,python、java、bash语言里匹配模式区别并不大。

flags也叫做正则表达式修饰符,可通过设置不同的值来控制匹配方式,如是否区分大小写、是否多行匹配(默认非多行匹配)等。

那么re.match返回的是什么呢?如果pattern应用在string上没有匹配的内容,则返回none;反之,返回一个matchObject也即一个“匹配对象”, 我们可以使用group(matchObject)来获取相关匹配内容。例:

1 import re
2 obj = re.match(‘www‘, ‘www.baidu.com.www‘)
3 obj.group()
4
5 # 输出
6 # ‘www‘ 

上述代码输出是‘www‘,但是string内部有两处‘www‘,为何只匹配一个?这里要特别说明一下,re.match是从左边第一个字符开始匹配的,所以只有在开头的‘www‘才能匹配到。那么如果要匹配的内容不在string的开头怎么办呢?这时就应该用到re.search

2. re.search

基本格式:

1 re.search(pattern, string, flags=0)

参数定义以及返回格式与re.match类似,唯一不同的点在于,匹配不一定从第一个字符开始,文中只要有匹配的内容即返回,例子如下:

1 import re
2 obj = re.search(‘www‘, ‘baidu.com.www.baidu‘)
3 obj.group()
4
5 # 输出
6 # ‘www‘

3. re.compile

无论使用 match 还是 search,匹配模式和匹配修饰符往往是固定的,我们要做的一般都是把它们应用在不同的string上而已。那么每次重复的输入pattern和flag岂不是很蛮烦。re.compile可以比较好的解决这个问题。

基本格式:

1 re.compile(pattern, flags)

pattern 和 flags定义与match的类似,该函数返回一个模式对象。该模式对象可调用正则化匹配方法(如 match 和 search),配合string作为参数可以直接对string做match或者search操作。例:

1 import re
2 match_pattern = re.compile(pattern=‘www‘)
3 obj = match_pattern.search(‘baidu.com.www.baidu‘)
4 obj.group()
5
6 # 输出
7 # ‘www‘

4. re.findall

之前讨论过的match和search在匹配一次之后会立刻返回,但是如果需要找到所有的匹配内容的话,我们就需要用到findall。

基本格式:

1 # match_patttern为通过complie获取的匹配模式
2 match_pattern.findall(string, pos, endpos)

pos和endpos代表制定字符串扫描起始位置以及结束位置。 返回值为匹配成功的字符串片段列表,若无可匹配字段则返回空列表。例:

1 import re
2 match_pattern = re.compile(pattern=‘www‘)
3 match_list = match_pattern.findall(‘www.baidu.com.www.baidu‘)
4 print (match_list)
5
6 # 输出
7 # [‘www‘, ‘www‘]

5. re.finditer

re.findall返回的是匹配列表,但有时候我们考虑返回一个迭代对象(考虑到惰性计算,节省内存),这时候可以考虑使用re.finditer。其用法与参数与findall类似,只是返回的是一个迭代器。例:

1 import re
2 match_pattern = re.compile(pattern=‘www‘)
3 match_iter = match_pattern.finditer(‘www.baidu.com.www.baidu‘)
4 print (type(match_iter))
5 for ele in match_iter:
6     # 元素需要调用group()
7     print (ele.group())

6. re.sub

在现实工程应用场景中,查找字符串匹配内容的目的往往在于替换它们,re提供了可以结合查找并替换匹配内容的方法:re.sub

基本格式:

1 re.sub(pattern, repl, string, count=0, flags=0)

pattern, flags 和 string 解释同match;repl为替换字符串,count替换的最大次数;返回值为替换后的字符串。例:

1 import re
2 match_pattern = re.compile(pattern=‘www‘)
3 test_str = ‘www.baidu.com.www.baidu‘
4 test_str = re.sub(pattern=match_pattern, repl=‘mmm‘, string=test_str, count=2)
5 print (test_str)
6
7 # 输出
8 # mmm.baidu.com.mmm.baidu

7. re.split

str.split()可以满足大多数情况下字符串分割任务,但是有时候分隔符并不一定是固定的一个字符串而是具有某种格式,这时候re.split的作用便发挥出来了。

基本格式:

1 re.split(pattern, string, maxsplit=0, flags=0)

pattern, string, flags定义同上,maxsplit为最大分割次数,默认为0表示不限制次数;返回分割后得到的字符串列表。例:

1 import re
2 # ‘\w\s\w‘中‘\w‘代表任意字母数字及下划线,‘\s‘代表空白字符
3 split_list = re.split(pattern=‘\w\s\w‘, string=‘www baidu com www baidu‘)
4 print (split_list)
5
6 # 输出
7 # [‘ww‘, ‘aid‘, ‘o‘, ‘w‘, ‘aidu‘]

 8. 正则表达式模式的编写

本文旨在于使得新手可以快速熟悉re各种功能,知道什么场景该用哪些方法,但正则表达式真正的魅力在于匹配模式(也就是re.match里的pattern参数)编写,个人感觉这部分的内容不是随便看看就可以很快掌握的,要在实际工作当中经常练习才可以熟练运用。当然如果仅仅要求能看懂正则表达式的话,并不需要很多学习时间。这部分内容网络上已经有很多了,我这里就不做赘述了,给个链接:http://www.runoob.com/python/python-reg-expressions.html

参考文献:

[1] Python 正则表达式

[2] Python中的惰性计算

[3] Python3正则匹配re.split,re.finditer及re.findall函数用法详解

lkjlkjlkjkjlkj1 re.comp

原文地址:https://www.cnblogs.com/uncleGulugulu/p/10319153.html

时间: 2024-10-10 21:18:09

python正则表达式模块re简介的相关文章

Python 正则表达式模块 (re) 简介

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息.Python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配. Python 正则表达式语法 正则表达式可以包含普通字符和特殊字符,普通字符(比如数字或者字母)可以直接对目标字符串

Python正则表达式模块(re模块)

Python是我接触到的第一门编程语言,虽然它足够简单,但是对于当时刚刚接触编程语言的我来说还是有些难度的,于是只是了解了一些Python的基本语法,稍微深入一点的地方都没怎么了解.不过,到现在为止,我已经接触了这门编程语言一年了,期间把Python各种特性,各种包都看过,了解过.不过对于正则表达式这块仍然一知半解,加上前段时间帮助聪哥整理了<深入Python3>的中文维护版,凑上这个国庆假期,于是来简单的聊一聊这个正则表达式模块--re. 首先是字符串中字符的替换问题,如果使用原生的Pyth

Python 正则表达式模块 (re模块)

原文地址:http://blog.51cto.com/13886948/2173077

python 正则表达式 re.sub &amp; re.subn

python正则表达式模块简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 Emacs 风格的模式.Emacs 风格模式可读性稍差些,而且功能也不强,因此编写新代码时尽量不要再使用 regex 模块,当然偶尔你还是可能在老代码里发现其踪影. 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.使用这个小型语言

Python正则表达式 学习笔记

python第一个正则表达式 1. import re : python正则表达式模块 2. 第一个正则表达式 re.compile(r'imooc') pattern.match('imooc python') 示例: import re pa = re.compile(r'imooc') #返回一个Pattern类型对象pa ma = pa.match('imooc python') #返回一个match对象ma print ma.group() #获得匹配结果 print ma.span(

一篇搞定Python正则表达式

1. 正则表达式语法 1.1 字符与字符类 1 特殊字符:\.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用\进行转义 2 字符类    1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个. 2. 字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符 3. 左方括号后跟随一个^,表示否定一个字符类,比如[^0-9]表示可以匹配一个任意非数字的字符. 4. 字符类内部,除了\之外,其他特殊字符

Python正则表达式简介

Python正则表达式简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 就其本质而言,正则表达式(或RE模块)是一种小型的,高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由C编写的匹配引擎执行. 原文地址:https://www.cnblogs.com/yinzhengjie/p/8542361.html

python常用模块(1):collections模块和re模块(正则表达式详解)

从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来说我们应该先解释模块概念性东西再来学习具体的模块使用.可是直接解释可能反而不好理解,模块的使用非常方便,所以我们采用先介绍使用常用模块过两天再具体进行模块概念的讲解. 预习: 实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998

Python 正则表达式re模块使用

re是Python的正则表达式模块,在此记录实际开发过程中的使用. 正则表达式的最佳实践是使用re.compile方法编译后使用,效率会更好 1.re.search() example: TS 1423031065.017865025 2015-02-04 14:24:25  14:24:25 up 82 days, 23:51,  2 users,  load average: 0.02, 0.03, 0.10 匹配 TS开头跟一个空格后跟若干个数字. >>> import re &g