正则表达式与python中re模块
一个网站,正则表达式入门的,很好
http://www.jb51.net/tools/zhengze.html
下面这个包含对python中re的介绍,也是很不错的
http://www.w3cschool.cc/python/python-reg-expressions.html
正则表达式的入门,上个链接就写的很好,就不再叙述关于正则表达式的知识。
下面介绍一下python 中re模块,也就是正则表达式匹配相关的用法。
版本python 3.4.3
re.match
1
2
3
4
5
6
|
>>> import re >>> text = "JGood is a handsome boy, he is cool, clever, and so on..." >>> m = re.match(r "(\w+)\s" , text) >>> if m: print (m.group( 0 )) JGood |
re.match的函数原型为:re.match(pattern, string, flags)
第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None;
第二个参数表示要匹配的字符串;
第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
匹配对象方法 | 描述 |
group(num=0) |
匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() |
返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
re.search
re.search函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
1
2
3
4
5
6
7
|
>>> o = re.search(r 'handsome' ,text) >>> >>> if o: print (o.group( 0 )) else : print ( "None" ) Handsome |
re.search的函数原型为: re.search(pattern, string, flags)
每个参数的含意与re.match一样
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
re.sub
re.sub用于替换字符串中的匹配项。下面一个例子将字符串中的空格 ' ' 替换成 '-' :
1
2
|
>>> print (re.sub(r '\s+' , '-' , text)) JGood - is - a - handsome - boy, - he - is - cool, - clever, - and - so - on... |
re.sub的函数原型为:re.sub(pattern, repl, string, count)
其中第二个函数是替换后的字符串;本例中为'-'
第四个参数指替换个数。默认为0,表示每个匹配项都替换。
re.sub还允许使用函数对匹配项的替换进行复杂的处理。如:re.sub(r'\s', lambda m: '[' + m.group(0) + ']', text, 0);将字符串中的空格' '替换为'[ ]'。
re.split
可以使用re.split来分割字符串,如:re.split(r'\s+', text);将字符串按空格分割成一个单词列表。
1
2
|
>>> re.split(r '\s+' , text) [ 'JGood' , 'is' , 'a' , 'handsome' , 'boy,' , 'he' , 'is' , 'cool,' , 'clever,' , 'and' , 'so' , 'on...' ] |
re.findall
re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r'\w*oo\w*', text);获取字符串中,包含'oo'的所有单词。
1
2
|
>>> re.findall(r '\w+oo\w+' ,text) [ 'JGood' , 'cool' ] |
re.compile
可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子:
1
2
3
|
>>> regex = re. compile (r '\w+oo\w+' ) >>> print (regex.findall(text)) [ 'JGood' , 'cool' ] |
下面这个的作用是#将字符串中含有'oo'的单词用[]括起来。但是从语法上来讲,我并没有看明白。
知道可以这么用就好了
1
2
|
>>> print (regex.sub( lambda m: '[' + m.group( 0 ) + ']' ,text)) [JGood] is a handsome boy, he is [cool], clever, and so on... |
下面是关于lambda的一个简单回顾:
1
2
3
|
def f(x): return x * * 2 print f( 4 ) |
Python中使用lambda的话,写成这样
1
2
|
g = lambda x : x * * 2 print g( 4 ) |
1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
3. 使用lambda在某些时候让代码更容易理解。
在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。比如上面map的例子,可以写成:
1
|
print [x * 2 + 10 for x in foo] |
非常的简洁,易懂。filter的例子可以写成:
1
|
print [x for x in foo if x % 3 = = 0 ] |
同样也是比lambda的方式更容易理解。
所以,什么时候使用lambda,什么时候不用,需要具体情况具体分析,只要表达的意图清晰就好。一般情况下,如果for..in..if能做的,我都不会选择lambda。
lambda broken?
在数学教学中,经常会使用到lambda,比如有一位老兄就遇到这样一个问题。他想创建一个函数数组fs=[f0,...,f9] where fi(n)=i+n. 于是乎,就定义了这么一个lambda函数:
1
|
fs = [( lambda n: i + n) for i in range ( 10 )] |
但是,奇怪的是,
1
2
3
4
5
6
|
>>> fs[ 3 ]( 4 ) 13 >>> fs[ 4 ]( 4 ) 13 >>> fs[ 5 ]( 4 ) 13 |
结果并没有达到这位老兄的预期,预期的结果应该是:
1
2
3
4
5
6
|
>>> fs[ 3 ]( 4 ) 7 >>> fs[ 4 ]( 4 ) 8 >>> fs[ 5 ]( 4 ) 9 |
面没有达到预期的原因是lambda中的i使用的是匿名函数外的全局变量。修改一下,就可以了:
1
2
3
4
5
6
7
|
fs = [( lambda n, i = i : i + n) for i in range ( 10 )] >>> fs[ 3 ]( 4 ) 7 >>> fs[ 4 ]( 4 ) 8 >>> fs[ 5 ]( 4 ) 9
|
正则表达式与python中re模块的更多相关文章
- 正则表达式与Python中re模块的使用
正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...
- 常用正则表达式与python中的re模块
正则表达式是一种通用的字符串匹配技术,不会因为编程语言不一样而发生变化. 部分常用正则表达式规则介绍: . 匹配任意的一个字符串,除了\n * 匹配任意字符串0次或者任意次 \w 匹配字母.数字.下划 ...
- python全栈开发之正则表达式和python的re模块
正则表达式和python的re模块 python全栈开发,正则表达式,re模块 一 正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的 ...
- python 历险记(五)— python 中的模块
目录 前言 基础 模块化程序设计 模块化有哪些好处? 什么是 python 中的模块? 引入模块有几种方式? 模块的查找顺序 模块中包含执行语句的情况 用 dir() 函数来窥探模块 python 的 ...
- 正则表达式和python的re模块
0 正则表达式 0.1 常见的元字符 .: 匹配除\r\n之外的任何单个字符 *: 匹配前面的子表达式任意次,例如Zz*可以匹配Z,可以匹配Zz,也可以匹配Zzzzzzzzzz +: ...
- 第11.18节 Python 中re模块的匹配对象
匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...
- Python中optionParser模块的使用方法[转]
本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内 ...
- python中threading模块详解(一)
python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thr ...
- 【转】关于python中re模块split方法的使用
注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于 ...
随机推荐
- connect() to 192.168.30.71:8082 failed (99: Cannot assign requested address) while connecting to upstream, client: 114.80.182.136, server: localhost, request: "GET /home/senior HTTP/1.1", upstream: "
connect() to 192.168.30.71:8082 failed (99: Cannot assign requested address) while connecting to ups ...
- Cocos2d-x——导入Cocostudio资源
(搬运自我在SegmentFault的博客) 目前正在和实训的小组成员一起做一款手机2D游戏,我们采用了Cocos2d-x进行开发.之前虽然早有耳闻,这次却是第一次认真地学习和使用Cocos2d-x. ...
- uoj#300.【CTSC2017】吉夫特
题面:http://uoj.ac/problem/300 一道大水题,然而我并不知道$lucas$定理的推论.. $\binom{n}{m}$为奇数的充要条件是$n&m=n$.那么我们对于每个 ...
- jQuery如何获取选中单选按钮radio的值
使用jquery获取radio的值,最重要的是掌握jquery选择器的使用,在一个表单中我们通常是要获取被选中的那个radio项的值,所以要加checked来筛选,比如有以下的一些radio项: 1. ...
- Java的引用StrongReference、 SoftReference、 WeakReference 、PhantomReference
1. Strong Reference StrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活于 JVM 内, 当没有任何对象指向它时 GC 执行后将会被回收 @Te ...
- Spring中c3p0连接池 jar包下载 c3p0-0.9.2.1 jar包和mchange-commons-java-0.2.3.4 jar 包
c3p0-0.9.2.1 jar包和mchange-commons-java-0.2.3.4 jar 包 下载地址: https://pan.baidu.com/s/1jHDiR7g 密码 tyek
- redis的一个bug
清楚redis缓存的时候,出现以下问题: (error) MISCONF Redis is configured to save RDB snapshots, but is currently not ...
- mysql 的 case when 用法
正确的格式: case when condition then result when condition then result when condition then result else re ...
- destoon后台权限-不给客户创始人权限并屏蔽部分功能
1.根目录下后台入口文件admin.php $_founder = $CFG['founderid'] == $_userid ? $_userid : 0; // $CFG['founderid ...
- 【android】安卓的权限提示及版本相关
Only dangerous permissions require user agreement. The way Android asks the user to grant dangerous ...