使用Python函数编译函数

开发 后端
在上面的说明中,我们已经对Python函数编译函数 ‘findall’很熟悉了。当然如果光有findall的话,很多功能是不能实现的。

下面开始介绍一下模块其它的常用Python函数编译,灵活搭配使用这些函数,才能充分发挥Python正则式的强大功能,看完本文你肯定有不少收获,希望本文能教会你更多东西。

直接使用findall ( rule , target )的方式来匹配字符串,一次两次没什么,如果是多次使用的话,由于正则引擎每次都要把规则解释一遍。而规则的解释又是相当费时间的,所以这样的效率就很低了。如果要多次使用同一规则来进行匹配的话,可以使用re.compile函数来将规则预编译,使用编译过返回的Regular Expression Object或叫做Pattern对象来进行查找。

将一个正则式,使用Python函数编译,不仅是为了提高匹配的速度,同时还能使用一些附加的功能。编译后的结果生成一个Pattern对象。这个对象里面有很多函数,他们看起来和re模块的Python函数编译非常象,它同样有findall , match , search ,finditer , sub , subn , split 这些函数。#t#

只不过它们的参数有些小小的不同。一般说来,re模块函数的***个参数,即正则规则不再需要了,应为规则就包含在Pattern对象中了,编译选项也不再需要了,因为已经被编译过了。因此re模块中函数的这两个参数的位置,就被后面的参数取代了。

findall , match , search 和finditer这几个函数的参数是一样的,除了少了规则和选项两个参数外,它们又加入了另外两个参数,它们是:查找开始位置和查找结束位置,也就是说,现在你可以指定查找的区间,除去你不感兴趣的区间。它们现在的参数形式是:

  1. import Image  
  2.  
  3. # load a color image  
  4. im = Image.open(''fun.jpg'')  
  5.  
  6. # convert to grey level image  
  7. Lim = im.convert(''L'')  
  8. Lim.save(''fun_Level.jpg'')  
  9.  
  10. # setup a converting table with constant threshold  
  11. threshold = 80 
  12. table = []  
  13. for i in range(256):  
  14.     if i < threshold: 
  15.         table.append(0)  
  16.     else:  
  17.         table.append(1)  
  18.  
  19. # convert to binary image by the table  
  20. bim = Lim.point(table, ''1'')  
  21.  
  22. bim.save(''fun_binary.jpg'')  

这里是一点小心得。 由于正则表达式使用反斜杠来转义特殊字符,而python自身处理字符串时,反斜杠也是用于转义字符,这样就产生了一个双重转换的问题要匹配字符串中1个反斜杠应该怎么写正则表达式?"\\",这样行吗?试试就知道了。

re模块抛异常了,Python函数编译因为"\\"就是一个反斜杠,对于正则表达式解析器来说,是一个转义字符,但是后面啥也没有,自然就报错了,"\\\"三个肯定是不行的,试试四个"\\\\",***匹配。

我们来分析一下这个例子:这个正则式是匹配单词、或数字、或一个由字母或’_’开头,后面接字母或数字的一个ID。我们给这三种情况的规则都包入了一个命名组,分别命名为’word’ , ‘num’ 和 ‘id’。我们规定大小写不敏感,所以使用了编译选项 。

责任编辑:chenqingxiang 来源: 博客园
相关推荐

2010-03-15 10:49:57

Python函数变量

2010-02-03 15:40:37

Python函数

2010-10-20 13:43:37

C++编译器

2019-09-02 10:51:59

Python脚本语言程序员

2021-03-31 07:39:18

pythonHIVEUDF函数

2010-02-01 17:50:32

Python装饰器

2022-07-07 09:03:36

Python返回函数匿名函数

2021-03-27 10:54:34

Python函数代码

2010-09-09 09:31:19

SQL函数left

2011-07-20 10:45:36

sqlite数据库sqlite扩展函数

2010-09-24 19:28:12

SQL CHARIND

2010-07-21 10:18:41

Perl map函数

2010-10-25 17:08:34

oracle聚合函数

2010-10-09 16:18:43

MYSQL IFNUL

2010-10-11 16:23:35

MYSQL BENCH

2010-10-11 15:08:44

MySQL conca

2009-08-19 14:26:58

C# JavaScri

2009-11-18 10:22:14

PHP substr

2010-01-18 17:23:55

函数

2010-10-28 15:38:24

Oracle to_d
点赞
收藏

51CTO技术栈公众号