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”中找到一个匹配,因为它是从字符串开头进行匹配的。
忽略大小写
search()在一个字符串中查找一个模式
search和match的工作方式一样,不同之处在于search会检查参数字符串任意位置的地方给定正则表达式模式的匹配情况。如果搜索到成功的匹配,会返回一个成功对象,否则返回None。
#encoding=utf-8
import re
m=re.match('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()方法相似,前者是根据正则表达式模式分隔字符串,后者是根据固定的字符串分隔,因此与后者相比,显著提升了字符分割的能力。返回成功匹配的列表。
在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()方法相似,前者是根据正则表达式模式分隔字符串,后者是根据固定的字符串分隔,因此与后者相比,显著提升了字符分割的能力。返回成功匹配的列表。
相关文章推荐
- DAY3 python群发短信
- Python NTLK资料
- Python闭包需要注意的问题
- ESL python调用C模块时传递unicode字符串报错问题解决
- ESL python调用C模块时传递unicode字符串报错问题解决
- 用python开发股票自动技术分析的软件
- vs2013下的python远程调试支持(2) :工程调试
- Python中set与frozenset方法和区别详解
- Python Requests快速入门
- 使用python的logging模块在stdout输出
- python 3.5以上安装 lxml 折腾一个下午 - -
- Python--基础学习--基本数据类型
- 金融领域R语言对比python
- python中的enumerate函数
- %格式化和format格式化--python
- Python获取文件夹下所有的文件路径列表
- python 并发
- Python学习笔记(一)三步走安装pip
- Python学习笔记(一)三步走安装pip
- python socket 交互通信