Python开发

python正则表达式教程

Python2.x与3​​.x版本区别Python IDE« Python面向对象Python CGI编程» Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

本章节主要介绍Python中常用的正则表达式处理函数。

re.match函数 re.match 尝试从字符串的开始匹配一个模式。

re.match(pattern, string, flags=0)函数参数说明:

参数描述 pattern匹配的正则表达式 string要匹配的字符串。 flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法描述 group(num=0)匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 groups()返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 实例:

#!/usr/bin/pythonimport reline = “Cats are smarter than dogs”matchObj = re.match( r'(.*) are (.*?) .*’, line, re.M

re.I)if matchObj:print “matchObj.group() : “, matchObj.group()print “matchObj.group(1) : “, matchObj.group(1)print “matchObj.group(2) : “, matchObj.group(2)else:print “No match!!”以上实例执行结果如下:

matchObj.group() : Cats are smarter than dogsmatchObj.group(1) : CatsmatchObj.group(2) : smarterre.search方法 re.match 尝试从字符串的开始匹配一个模式。

re.search(pattern, string, flags=0)函数参数说明:

参数描述 pattern匹配的正则表达式 string要匹配的字符串。 flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 匹配成功re.search方法方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

匹配对象方法描述 group(num=0)匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 groups()返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 实例:

#!/usr/bin/pythonimport reline = “Cats are smarter than dogs”;matchObj = re.match( r'(.*) are (.*?) .*’, line, re.M

re.I)if matchObj:print “matchObj.group() : “, matchObj.group()print “matchObj.group(1) : “, matchObj.group(1)print “matchObj.group(2) : “, matchObj.group(2)else:print “No match!!”以上实例执行结果如下:matchObj.group() : Cats are smarter than dogsmatchObj.group(1) : CatsmatchObj.group(2) : smarterre.match与re.search的区别 re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

#!/usr/bin/pythonimport reline = “Cats are smarter than dogs”;matchObj = re.match( r’dogs’, line, re.M

re.I)if matchObj:print “match –> matchObj.group() : “, matchObj.group()else:print “No match!!”matchObj = re.search( r’dogs’, line, re.M

re.I)if matchObj:print “search –> matchObj.group() : “, matchObj.group()else:print “No match!!”以上实例运行结果如下:No match!!search –> matchObj.group() : dogs检索和替换 Python 的re模块提供了re.sub用于替换字符串中的匹配项。

re.sub(pattern, repl, string, max=0)返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。

可选参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。

#!/usr/bin/pythonimport rephone = “2004-959-559 # This is Phone Number”# Delete Python-style commentsnum = re.sub(r’#.*$’, “”, phone)print “Phone Num : “, num# Remove anything other than digitsnum = re.sub(r’\D’, “”, phone)print “Phone Num : “, num以上实例执行结果如下:Phone Num : 2004-959-559Phone Num : 2004959559正则表达式修饰符 – 可选标志 正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(

) 它们来指定。如 re.I

re.M 被设置成 I 和 M 标志:

修饰符描述 re.I使匹配对大小写不敏感 re.L做本地化识别(locale-aware)匹配 re.M多行匹配,影响 ^ 和 $ re.S使 . 匹配包括换行在内的所有字符 re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 正则表达式模式 模式字符串使用特殊的语法来表示一个正则表达式:

字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。

多数字母和数字前加一个反斜杠时会拥有不同的含义。

标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。

反斜杠本身需要使用反斜杠转义。

由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r’/t’,等价于’//t’)匹配相应的特殊字符。

下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注