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

python正则表达式

2016-05-23 09:15 573 查看
搜索与匹配

在python专门术语中,有两种主要方法来完成模式匹配:搜索(searching)和匹配(matching)。搜索,即在字符串任意部分中搜索匹配的模式,而匹配是指,判断一个字符串能否从起始处全部或部分的匹配某个模式。搜索通过search()函数或方法来实现,而匹配是以调用match()函数或方法实现的。总之,当我们说模式的时候,我们全部使用术语“匹配”(matching);我们按照python如何完成模式匹配的方式来区分“搜索”和“匹配”。



RE编译(何时使用compile函数)

python的代码最终会被编译为字节码,然后才被解释器执行。我们特别提到调用eval()或exec()调用一个代码对象而不是一个字符串,在性能上会有明显的提升,这是因为对前者来说,编译过程不必执行。换句话说,使用预编译代码对象要比使用字符串快,因为解释器在执行字符串形式的代码前必须先把它编译成代码对象。

这个概念也适用于正则表达式,在模式匹配之前,正则表达式模式必须先被编译成regex对象。由于正则表达式在执行过程中被多次用于比较,我们强烈建议先对它做预编译,而且,既然正则表达式的编译时必须的,那使用预先编译来提升性能无疑是明智之举。re.compile()就是用来提供此功能的。



match()匹配字符串

在处理正则表达式时,除regex对象外,还有另一种对象类型-匹配对象。这些对象是在match()或search()被成功调用之后所返回的结果。re模块的函数、正则表达式对象(regex object)的方法:match()函数尝试从字符串的开头开始对模式进行匹配。如果匹配成功,就返回一个匹配对象,而如果匹配失败了,就返回None。匹配对象的group()方法可以用来显示那个成功的匹配。





即使字符串比模式要长,匹配也可能成功;只要模式是从字符串的开始进行匹配的。例如,模式“foo”在字符串“food on he table”中找到一个匹配,因为它是从字符串开头进行匹配的。

import re
m=re.match('foo','food on the table')
if m is not None:
print(m.group())




import re
m=re.match('foo','the food on the table')
if m is not None:
print(m.group())



忽略大小写



search()在一个字符串中查找一个模式

search和match的工作方式一样,不同之处在于search会检查参数字符串任意位置的地方给定正则表达式模式的匹配情况。如果搜索到成功的匹配,会返回一个成功对象,否则返回None。

#encoding=utf-8
import re
m=re.match('foo', 'seafood')
if m is not None:
print(m.group())



import re
m=re.search('foo','seafood')
if m is not None:
print(m.group())



findall()找到每个出现的匹配部分

它用于非重叠地搜索某字符串中一个正则表达式模式出现的情况。findall()和search()相似之处在于二者都执行字符串搜索,但findall()和match()与search()不同之处是,findall()总返回一个列表。如果findall()没有找到匹配的部分,会返回空列表;如果成功找到匹配部分,则返回所有匹配部分的列表(按从左到右出现的顺序排列)。



sub()和subn()进行替换

两者都是将某字符串中所有匹配正则表达式模式的部分进行替换。用来替换的部分通常是一个字符串,但也可能是一个函数,该函数返回一个用来替换的字符串。subn()和sub()一样,但它还返回一个表示替换次数的数字,替换后的字符串和表示替换次数的数字作为一个元组的元素返回。

split()分隔(分隔模式)

re模块和正则表达式对象的方法split()与字符串的split()方法相似,前者是根据正则表达式模式分隔字符串,后者是根据固定的字符串分隔,因此与后者相比,显著提升了字符分割的能力。返回成功匹配的列表。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: