正则表达式与python中re模块
2015-08-27 18:49
676 查看
一个网站,正则表达式入门的,很好
http://www.jb51.net/tools/zhengze.html
下面这个包含对python中re的介绍,也是很不错的
http://www.w3cschool.cc/python/python-reg-expressions.html
正则表达式的入门,上个链接就写的很好,就不再叙述关于正则表达式的知识。
下面介绍一下python中re模块,也就是正则表达式匹配相关的用法。
版本python3.4.3
?
re.match的函数原型为:re.match(pattern,string,flags)
第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;
第二个参数表示要匹配的字符串;
第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
?
re.search的函数原型为:re.search(pattern,string,flags)
每个参数的含意与re.match一样
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
?
re.sub的函数原型为:re.sub(pattern,repl,string,count)
其中第二个函数是替换后的字符串;本例中为'-'
第四个参数指替换个数。默认为0,表示每个匹配项都替换。
re.sub还允许使用函数对匹配项的替换进行复杂的处理。如:re.sub(r'\s',lambdam:'['+m.group(0)+']',text,0);将字符串中的空格''替换为'[]'。
?
?
?
下面这个的作用是#将字符串中含有'oo'的单词用[]括起来。但是从语法上来讲,我并没有看明白。
知道可以这么用就好了
?
下面是关于lambda的一个简单回顾:
?
Python中使用lambda的话,写成这样
?
1.使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2.对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3.使用lambda在某些时候让代码更容易理解。
在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。比如上面map的例子,可以写成:
?
非常的简洁,易懂。filter的例子可以写成:
?
同样也是比lambda的方式更容易理解。
所以,什么时候使用lambda,什么时候不用,需要具体情况具体分析,只要表达的意图清晰就好。一般情况下,如果for..in..if能做的,我都不会选择lambda。
lambdabroken?
在数学教学中,经常会使用到lambda,比如有一位老兄就遇到这样一个问题。他想创建一个函数数组fs=[f0,...,f9]wherefi(n)=i+n.于是乎,就定义了这么一个lambda函数:
?
但是,奇怪的是,
?
结果并没有达到这位老兄的预期,预期的结果应该是:
?
面没有达到预期的原因是lambda中的i使用的是匿名函数外的全局变量。修改一下,就可以了:
?
下面这个包含对python中re的介绍,也是很不错的
正则表达式的入门,上个链接就写的很好,就不再叙述关于正则表达式的知识。
下面介绍一下python中re模块,也就是正则表达式匹配相关的用法。
版本python3.4.3
re.match
第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;
第二个参数表示要匹配的字符串;
第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
匹配对象方法 | 描述 |
group(num=0) | 匹配的整个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从1到所含的小组号。 |
re.search
re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。每个参数的含意与re.match一样
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
re.sub
re.sub用于替换字符串中的匹配项。下面一个例子将字符串中的空格''替换成'-':其中第二个函数是替换后的字符串;本例中为'-'
第四个参数指替换个数。默认为0,表示每个匹配项都替换。
re.sub还允许使用函数对匹配项的替换进行复杂的处理。如:re.sub(r'\s',lambdam:'['+m.group(0)+']',text,0);将字符串中的空格''替换为'[]'。
re.split
可以使用re.split来分割字符串,如:re.split(r'\s+',text);将字符串按空格分割成一个单词列表。re.findall
re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r'\w*oo\w*',text);获取字符串中,包含'oo'的所有单词。re.compile
可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子:知道可以这么用就好了
2.对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3.使用lambda在某些时候让代码更容易理解。
在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。比如上面map的例子,可以写成:
所以,什么时候使用lambda,什么时候不用,需要具体情况具体分析,只要表达的意图清晰就好。一般情况下,如果for..in..if能做的,我都不会选择lambda。
lambdabroken?
在数学教学中,经常会使用到lambda,比如有一位老兄就遇到这样一个问题。他想创建一个函数数组fs=[f0,...,f9]wherefi(n)=i+n.于是乎,就定义了这么一个lambda函数:
相关文章推荐
- PEP8 Python 编码规范整理
- 小甲鱼Python第九讲课后题
- python 学习非常好的博客
- Python计算矩阵相乘
- Python中dict详解
- python 中文编码 #-*-coding:utf-8-*-
- python-spider
- 用Python实现基本排序算法02——选择排序
- python 倒计时 9,8,7,。。。。。。0
- 皮尔逊相关系数的计算(python代码版)
- python annotateit 安装依赖包
- python——处理xls表格
- 小甲鱼Python第八讲课后题
- python 输入print 和 输出raw_input
- PHP 和 Python实现Project Euler 1、2题
- python中的排序
- python 使用文件运行方式
- 9.9 Python 文档字符串
- 轻松python文本专题-maketrans和translate
- 轻松python文本专题-maketrans和translate