Python正则表达式整理

#功能:
#匹配、搜索、替换、分割

re.compile(pattern[, flags])                      编译正则表达式pattern为 `RegexObject` 实例,可以为不同的操作提供方法,如模式匹配搜索或字符串替换等。

re.search(pattern, string[, flags])   扫描字符串string,找到与 pattern匹配的元素,并返回 MatchObject实例,没有找到匹配的元素则返回None  
re.match(pattern, string[, flags])   扫描字符串string,看string是不是与该 pattern匹配,匹配则返回 MatchObject实例,不匹配则返回None
re.split(pattern, string[, maxsplit=0])   扫描字符串string,将与pattern匹配的子串作为分隔符来分割string,可以指定最大分割次数。如果指定0,则表示全部分割。返回值为分割后的字串组成的列表。
re.findall(pattern, string[, flags])  扫描字符串string,将string中所有与pattern匹配的子串以列表的形式返回
*re.finditer(pattern, string[, flags])   扫描字符串string,返回string中所有与pattern匹配的子串的迭代器
re.sub(pattern, repl, string[, count])   扫描字符串string,替换所有与pattern匹配的子串为repl,并可以通过设置count的值来指定最大替换次数,返回替换后的字符串,count为0时替换全部符合pattern的字串
re.subn(pattern, repl, string[, count])   与re.sub()同,只不过返回的是一个元组,元组第一项为替换后的字符串,第二项为替换了的次数
re.escape(string)     将字符串中的non-alphanumerics字符(我已不知道该怎么翻译比较好了)用反义字符的形式显示出来。


Regular Expression Objects
RegexObject.match(string[, pos[, endpos]])
RegexObject.search(string[, pos[, endpos]])
RegexObject.split(string[, maxsplit=0])
RegexObject.findall(string[, pos[, endpos]])
RegexObject.finditer(string[, pos[, endpos]])
RegexObject.sub(repl, string[, count=0])
RegexObject.subn(repl, string[, count=0])
RegexObject.flags
RegexObject.groupindex
RegexObject.pattern

Match Objects
MatchObject.expand(template)   根据一个模版用找到的内容替换模版里的相应位置 。它根据一个模版来用匹配到的内容替换模版中的相应位置,组成一个新的字符串返回。它使用\g<index|name>或 \index 来指示一个组。
MatchObject.group([group1, ...])  获取匹配的组,缺省返回组0,也就是全部值
MatchObject.groups([default])   返回全部的组
MatchObject.start([group])    获取匹配的组的开始位置
MatchObject.end([group])   获取匹配的组的结束位置
MatchObject.span([group])     获取匹配的组的(开始,结束)位置
MatchObject.pos
MatchObject.endpos
MatchObject.lastindex
MatchObject.lastgroup
MatchObject.re
MatchObject.string

pattern: 正则表达式模式
string: 进行操作的字符串对象
flags:可选参数,进行匹配的标志
maxsplit:可选参数,最大分割次数
repl:要替换成的内容
count:可选参数,最大替换次数
pos:可选参数,进行匹配、查找的起始位置
endpos:可选参数,进行匹配、查找的结束位置
group: 可选参数,分组编号,可以为组的名字或数字编号(从1开始算起)

基本元字符:
.  匹配任意单个字符
|  逻辑或操作符
[]  匹配字符集合中的一个字符
[^]对字符集合求非
- 定义一个区间(例如[a-z])
\ 对下一个字符转义


数量元字符
*  匹配前一个字符(子表达式)的零次或多次重复
*?  *的懒惰型版本
+  匹配前一个字符(子表达式)的一次或多次重复
+?  +的懒惰型版本
?  匹配前一个字符(子表达式)的零次或一次重复
{n}  匹配前一个字符(子表达式)的n次重复
{m,n}  匹配前一个字符(子表达式)至少m次重复,至多n次重复
{m,n}?  {m,n}的懒惰型版本,原来能匹配n个旧匹配n个,现在能匹配m个就匹配m个
{n,}  匹配前一个字符(子表达式)n次或更多次重复
{n,}?   {n,}的懒惰型版本

位置元字符
^匹配字符串的开头,多行模式下为每行的开头
\A  匹配字符串开头,单行模式下匹配每一行开头,多行模式下只匹配第一行开头
$   匹配字符串结束,多行模式下为每行的结束
\Z  匹配字符串结束,单行模式下匹配每一行结束,多行模式下只匹配最后一行结束
【\< 匹配单词的开头】
【\> 匹配单词的结束】
\b  匹配单词边界:[^a-zA-Z0-9]
\B  匹配非单词边界:[^\b]

 


以'\'开头的元字符
\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_]。
\b  匹配单词边界:[^a-zA-Z0-9]
\B  匹配非单词边界:[^\b]
\A  匹配字符串起始位置,单行模式下匹配每一行起始位置,多行模式下只匹配第一行起始位置
\Z  匹配字符串结束位置,单行模式下匹配每一行结束位置,多行模式下只匹配最后一行结束位置
\number 匹配组名称相同的字符串。
[\b]  退格符
\c  匹配一个控制字符
\f  换页符
\n  换行符
\r  回车符
\t  制表符(Tab字符)
\v  垂直制表符
\\  匹配一个反斜杠本身
\x  匹配一个十六进制数字
\0  匹配一个八进制数字


flags

DOTALL, S 使 . 匹配包括换行在内的所有字符 
IGNORECASE, I 使匹配对大小写不敏感 
LOCALE, L  做本地化识别(locale-aware)匹配 
MULTILINE, M 多行匹配,影响 ^ 和 $ 
VERBOSE, X 能够使用 REs 的 verbose 状态,使之被组织得更清晰易
UNICODE, U 匹配Unicode字符


回溯引用和前后查找
() 定义一个子表达式
\1 匹配地1个子表达式;\2代表第2个子表达式,依次类推
?= 向前查找
?<= 向后查找
?! 负向查找
?!= 负向后查找
?() 条件(if then)
?()| 条件(if then else)


大小写转换
\E 结束\L或\U转换
\l 把下一个字符转换为小写
\L 把后面的字符转换为小写,直到遇见\E为止
\u 把下一个字符转换为大写
\U 把后面的字符转换为大写,知道遇见\E位置

匹配模式
(?m) 分行匹配模式

 

I IGNORECASE 忽略大小写区别。
L LOCAL 字符集本地化。这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符\w,在英文环境下,它代表[a-zA-Z0-9],即所以英文字符和数字。如果在一个法语环境下使用,缺省设置下,不能匹配"é" 或 "?"。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符。
M MULTILINE 多行匹配。在这个模式下’^’(代表字符串开头)和’$’(代表字符串结尾)将能够匹配多行的情况,成为行首和行尾标记。比如

>>> s=’123 456\n789 012\n345 678’

>>> rc=re.compile(r’^\d+’) #匹配一个位于开头的数字,没有使用M选项

>>> rc.findall(s)

['123'] #结果只能找到位于第一个行首的’123’

>>> rcm=re.compile(r’^\d+’,re.M) #使用 M 选项

>>> rcm.findall(s)

['123', '789', '345'] #找到了三个行首的数字

同样,对于’$’来说,没有使用M选项,它将匹配最后一个行尾的数字,即’678’,加上以后,就能匹配三个行尾的数字456 012和678了.

>>> rc=re.compile(r’\d+$’)

>>> rcm=re.compile(r’\d+$’,re.M)

>>> rc.findall(s)

['678']

>>> rcm.findall(s)

['456', '012', '678']

 

S DOTALL ‘.’号将匹配所有的字符。缺省情况下’.’匹配除换行符’\n’外的所有字符,使用这一选项以后,’.’就能匹配包括’\n’的任何字符了。

 

U UNICODE \w, \W, \b, \B, \d, \D, \s 和 \S都将使用Unicode。

 

X VERBOSE 这个选项忽略规则表达式中的空白,并允许使用’#’来引导一个注释。这样可以让你把规则写得更美观些。比如你可以把规则

>>> rc = re.compile(r"\d+|[a-zA-Z]+") #匹配一个数字或者单词使用X选项写成:

>>> rc = re.compile(r""" # start a rule\d+ # number| [a-zA-Z]+ # word""", re.VERBOSE)在这个模式下,如果你想匹配一个空格,你必须用'\ '的形式('\'后面跟一个空格)

 

posted on 2013-11-04 12:29  zhyongwei  阅读(178)  评论(0)    收藏  举报