您的位置:首页 > 编程语言 > Python开发

Python中的re模块(一)

2016-03-09 19:59 721 查看

什么是正则表达式(re模块)

就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。使用这个小型语言,你可以为想要匹配的相应字符串集指定规则;该字符串集可能包含英文语句、e-mail地址、TeX命令或任何你想搞定的东西。然后你可以问诸如“这个字符串匹配该模式吗?”或“在这个字符串中是否有部分匹配该模式呢?”。你也可以使用
RE 以各种方式来修改或分割字符串。

正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。在高级用法中,也许还要仔细留意引擎是如何执行给定 RE ,如何以特定方式编写 RE 以令生产的字节码运行速度更快。本文并不涉及优化,因为那要求你已充分掌握了匹配引擎的内部机制。

正则表达式语言相对小型和受限(功能有限),因此并非所有字符串处理都能用正则表达式完成。当然也有些任务可以用正则表达式完成,不过最终表达式会变得异常复杂。碰到这些情形时,编写 Python 代码进行处理可能反而更好;尽管 Python 代码比一个精巧的正则表达式要慢些,但它更易理解。

字符串匹配功能

re.match 尝试从字符串的开始匹配一个模式,例如:下面的例子匹配第一个单词。
import re

text = "It is very important"
m = re.match(r"(\w+)\s", text)
if m:
print m.group(0), "\n", m.group(1)
else:
print 'not match'


 运行结果如下图:



re.match的函数原型为:re.match(pattern, string, flags) 
第一个参数是正则表达式,这里为"(\w+)\s",如果匹配成功,则返回一个Match,否则返回一个None; 
第二个参数表示要匹配的字符串; 
第三个参数是标致位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 

group方法可以抽取这些区域的内容,通过group方法我们可以实现函数的多组显示输出,group(1)会返回第一组的内容,group(2)会返回第二组的内容,group(0)会返回全部的内容。下面的例子会演示group的使用方法。

import re
text ="10/15/20"
m = re.match("(\d{2})/(\d{2})/(\d{2,4})", text) 
if m: print m.group(1, 2, 3),m.group(0)

运行结果如下图:



也许最重要的元字符是反斜杠"\"。 做为 Python
中的字符串字母,反斜杠后面可以加不同的字符以表示不同特殊意义。它也可以用于取消所有的元字符,这样你就可以在模式中匹配它们了。举个例子,如果你需要匹配字符 "[" 或 "\",你可以在它们之前用反斜杠来取消它们的特殊意义: \[ 或 \\。 

一些用 "\" 开始的特殊字符所表示的预定义字符集通常是很有用的,象数字集,字母集,或其它非空字符集。下列是可用的预设特殊字符:

 \d  匹配任何十进制数;它相当于类 [0-9]。

 \D  匹配任何非数字字符;它相当于类 [^0-9]。 

\s  匹配任何空白字符;它相当于类  [ \t\n\r\f\v]。

 \S  匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。

 \w  匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。

 \W  匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: