python正则表达式re

1. 正则表达式简介

正则表达式并不是Python的一部分。在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别

只在于不同的编程语言实现支持的语法数量不同;但不被支持的语法通常是不常用的部分。python正则表

达式是用于文本匹配的强大工具,在源字符串中查找与给定的正则表达式相匹配的部分。一个正则表达式

是由字母、数字和特殊字符(括号、星号和问号等)组成。

正则表达式中的特殊字符:
^      正则表达式的开始字符
$      正则表达式的结束字符
\w     匹配字母、数字、下划线,等价于[a-zA-Z0-9_] 
\W     匹配不是字母、数字、下划线的字符
\s     匹配空白字符
\S     匹配不是空白的字符 
\d     匹配数字,等价于[0-9] 
\D     匹配非数字的字符
\b     匹配单词的开始和结束
\B     匹配不是单词开始和结束的位置
.      匹配任意字符,包括汉字
[m]    匹配单个字符串
[m…n] 匹配多个字符串
[m-n]  匹配m到n区间内的数字、字母
[^m]   匹配除m以外的字符串
()     对正则表达式进行分组,一对圆括号表示一组
其中,匹配符"[]"可以指定一个匹配范围,例如[ok]将匹配包含o或k的字符
"("和")"等正则表达式中的特殊字符,如果要把它们当做普通字符处理,需要在前面加上转义字符"\"

正则表达式中的限定符:
*     匹配0次或多次
+     匹配1次或多次
?     匹配1次或0次
{m}   重复m次
{m,n} 重复m到n次。其中n可以省略,表示m到任意次
利用{}可以控制字符重复出现的次数。例如,\d{1,4}表示1位到3位数字。

限定符与"?"(贪婪性)的使用

*?     匹配0次或多次,且最短匹配
+?     匹配1次或多次,且最短匹配
??     匹配1次或0次,且最短匹配
{m,n}? 重复m到n此,且最短匹配
{?#…} 正则表达式中的注释
{?P<name>…} 给分组命名,name表示分组的名称
{?P=name}    使用名为name的分组

2. 使用re模块处理正则表达式

re模块的一些函数都有一个flags参数,该参数用于设置匹配的规则选项。规则选项分别如下:
?I(IGNORECASE): 忽略大小写(完整写法:re.I或re.IGNORECASE,下同)
?M(MULTILINE): 多行模式,改变‘^‘和‘$‘的行为
?S(DOTALL): 点任意匹配模式,改变‘.‘的行为
?L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
?U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
?X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白、换行,以方便添加注释。

re模块提供了一些根据正则表达式进行查找、替换和分割字符串的函数,这些函数使用正则表达式作为第

一个参数。re模块常用函数如下:

findall(pattern,string[,flags=0])
从string内查找符合pattern的表达式,然后返回list列表

split(pattern,string[,maxsplit=0])
按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。

sub(pattern,repl,string[,count=0])
repl可以是字符串,也可以是函数。
当repl是字符串的时候,就是把string内符合pattern的子串用repl替换;
当repl是函数的时候,对每一个在string内不重叠的,匹配pattern的子串,调用repl(substring),然

后用返回值替换substring
count用于指定最多替换次数,不指定时全部替换。

subn(pattern,repl,string[,count=0]): 
功能与sub()相同,但是多返回一个值,即匹配后的替换次数

match(pattern,string[,flags=0])
根据pattern从string头部开始匹配字符串,只返回第一次匹配成功的对象(MatchObject对象)。否则返回

None

search(pattern,string[,flags=0])
根据pattern在string中匹配字符串,只返回第一次匹配成功的对象(MatchObject对象)。否则返回None

Match对象是一次匹配的结果,Match对象的属性和方法:

属性:
string: 搜索的字符串。 
re: 匹配时使用的Pattern对象。 
pos: 搜索的开始索引位置。值与Pattern.match()和Pattern.seach()方法的同名参数相同。 
endpos: 搜索的结束索引位置。值与Pattern.match()和Pattern.seach()方法的同名参数相同。 
lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。 
lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。

方法:
group([group1, …]): 
获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用

别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了

多次的组返回最后一次截获的子串。 
groups([default]):
以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的

组以这个值替代,默认为None。 
groupdict([default]): 
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同

上。 
start([group]):
返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。 
end([group]): 
返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。 
span([group]): 
返回(start(group), end(group))。 
expand(template):
将匹配到的分组代入template中然后返回。template中可以使用\id或\g<id>、\g<name>引用分组,但不能

使用编号0。\id与\g<id>是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符‘0‘,只能

使用\g<1>0。

正则表达式的解析非常费时。如果多次使用findall()匹配字符串,搜索效率可能比较低。如果要多次使用

同一规则匹配字符串,可以使用compile()函数进行预编译,compile()函数返回一个pattern对象。该对象

拥有一系列方法用于查找、替换和扩展字符串,从而提高字符串的匹配速度。

compile(pattern[,flag=0]): 
将字符串形式的正则表达式编译为Pattern对象。第二个参数flag是匹配模式,取值可以使用按位或运算符

‘|‘表示同时生效,比如re.I|re.M

Pattern对象的属性和方法:

属性:
pattern: 编译时用的表达式字符串。
flags: 编译时用的匹配模式。数字形式。
groups: 表达式中分组的数量。
groupindex: 以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在

内。

方法:
findall(string[,start[,end]]):查找所有符合pattern对象的结果,返回一个包含匹配结果的列表
finditer(string[,start[,end]]):返回一个包含匹配结果(Match对象)的地址
match(string[,start[,end]]):用法同match()
search(string[,start[,end]]):用法同search()

python正则表达式re,布布扣,bubuko.com

时间: 2024-10-12 21:17:38

python正则表达式re的相关文章

Python正则表达式Regular Expression基本用法

资料来源:http://blog.csdn.net/whycadi/article/details/2011046   直接从网上资料转载过来,作为自己的参考.这个写的很清楚.先拿来看看. 1.正则表达式re模块的基本函数. (1)findall函数的用法 findall(rule,target[,flag])是在目标字符串中找到符合规则的字符串.参数说明:rule表示规则,target表示目标字符串,[,flag]表示的是规则选项.返回的结果是一个列表.若没找到符合的,是一个空列表. 如: 因

python正则表达式详解

python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的.下面,我来介绍一下python中的正则表达式是怎么使用的. 首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用

python正则表达式

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.<html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法

python 正则表达式基础

又一段时间没写博客了 最近一段时间在写pygame 又忽略了博客 今天因要帮朋友修改电影字幕 用到了正则表达式 重新学了一遍 发现还是得多练 才能算渐渐掌握 python 正则表达式 1.1介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同:但不用担心,不被支持

python正则表达式-findall

python正则表达式-findall #coding=utf-8 import re ''' # 获取匹配的的内容 ''' p = re.compile(r'\d+') print '找出所有的数字',p.findall('one1two2three3four4') ''' # 获取匹配的的内容-比较复杂的例子 ''' unicodePage ='<div class="content" title="2015-02-22 00:08:46">i am

Python正则表达式 re(regular expression)

1. 点. .: 代表一个字符 (这个跟linux的正则表达式是不同的,那里.代表的是后面字符的一次或0次出现) 2. 转义 \\ 或者 r'\': 如 r'python\.org' (对.符号的转义) 3. ^ 非或叫做排除 如[^abc]: 任何以非a,b,c的字符 4. | 选择符 如python|perl (从python和perl选择一个) 也可以: p(ython|erl) 5. ? 可选项 如: r'(http://)?(www\.)?python\.org' (http://和w

[ Python ] 正则表达式(1)

[ Python ] 正则表达式(1) 概念区分:搜索 ( Search ) 和 匹配 ( Match ) from re import search, match search("nana", "banana") # Search succeeds! search("bana", "banana") # Search succeeds! match("nana", "banana")

Python正则表达式指南

本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程. 注意:本文基于Python2.4完成:如果看到不明白的词汇请记得百度谷歌或维基,whatever. 尊重作者的劳动,转载请注明作者及原文地址 >.< [原文链接]http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表

Python正则表达式使用过程中的小细节

今天用Python写了个简单的爬虫程序,抓取虎扑篮球(nba.hupu.com)的首页内容,代码如下: 1 #coding:gb2312 2 import urllib2, re 3 webpage = urllib2.urlopen('http://nba.hupu.com') 4 text = webpage.read() 5 m = re.search('<a href=(.*) (.*)?>彩票</a>', text) 6 print m.group(1) 按照预想应该输出