python正则表达式

正则表达式

1. 匹配一个字符

说明 表达式 等价表达式
数字 \d [0-9]
字母、数字、下划线 \w [a-zA-Z0-9_]
除换行外任意字符 .  
空格 \s [\t\n\r\f\v]
除数字 \D  
除字母、数字、下划线 \W  
除空格 \S  

 2. 集合

表达式 说明
[abc][a-g] []指一个集合,匹配[]中的任意一个
[^A] ^在集合[]开头,匹配除A以外字符
A|B 匹配A或B表达式
(A) ()指一个组,匹配A中所有内容

3. 重复

表达式 说明
a? 贪心地匹配a 0次或1次(贪心表示尽可能多地)
a{m, n} 信心地匹配a m-n次。{,n}:0-n次 {m,}:m-无限次
a* 贪心地匹配a 0-无限次
a+ 贪心地匹配a 1-无限次
a??  a*?  a+? a{m,n}? 尽可能少地匹配

4. 匹配位置

表达式 说明
^... 要求匹配给定串的开头
...$ 要求匹配给定串的结尾
...\b

匹配单词边界,匹配成功要求A匹配到给定串的边界

使用时模式串要用r,因为\b还有其它意义

...\B 匹配单词非边界
\A... 要求匹配给定串的开头
...\Z 要求匹配给定串的结尾

5. 设置标志

表达式 说明
(?aiLmsux)

(?)是固定格式,后面的字母代表不同意思。

a(ASCII),i(IGNORECASE),L(LOCALE),

m(MULTILINE,^和$会匹配每一行的开头和结尾),

s(DOTALL,不用的时候.不能匹配换行符),u(),

x(VERBOSE,可以在pattern里面换行写注释,

如a = re.compile(r"""\d +  # the integral part \.    

                                       # the decimal point \d *  

                                       # some fractional digits""", re.X),

#用来表示注释的开始)

(?imsx-imsx:...) 设置或移除标志,中间是-,标志的集合为imsx
(?P<name>...)

和一般()表达式一样,额外功能:可以用name来访问到对应的组

例:

matchObj = re.match("?P<first>.*)", "first")

data = matchObj.group("first")

(?P=name) 可以反向引用一个名字为name的组
(?#...) #说明括号中的内容是注释,直接省略
A(?=B) 若A在B前,才可匹配出A,同时B不消耗字符
A(?!B) 若A不在B前,才可匹配出A,同时B不消耗字符
(?<=A)B 若A在B前,才可匹配出B,同时A消耗字符
(?<!A)B 若A不在B前,才可匹配出B,同时A消耗字符
\number

引用第number组的模式串

pattern = '(A)(B) \2' 和 pattern = '(A)(B)(B)'是等价的

例:re.search(r'(a)(b)\2', 'abb')

 

函数

1. re:正则表达式模块

函数声明 功能 备注
compile(pattern, flag=0) 把一个正则表达式编译成一个正则表达式对象  pattern: 模式串flag:编译方法
search(pattern, string, flags=0)   如果匹配不成功,则返回None成功,则MatchObject类型值

 split(pattern, string, maxsplit-0, flags=0)

按照pattern模式对string进行分割(1. 把匹配成功的部分除去且成为分界

2. 如果pattern中有(),那么匹配成功的部分不除去且自己成为一个组)

maxsplit:最多分割次数

如果pattern在串的最后能匹配成功,则还会分割出一个空串

 findall(pattern, string, flags=0)

把string按照pattern从左到右匹配,子串结果以元组形式返回(不重叠)  

 finditer(pattern, string, flags=0) 

把string按照pattern从左到右匹配,返回迭代器(不重叠)  

sub(pattern, repl, string, count=0, flags=0) 

string中和pattern匹配成功的部分删除(只有最左的),

用repl来替换,返回匹配后的串

count:要删除匹配成功的个数,如果取0则所有都要换

escape(pattern)

把pattern中除了ASCII字母和数字保留,其它都加上转义符\,

并返回修改后的串(当串中可能包含正则表达式特殊符号时可用来转换)

 

 2.  re.RegexObject类:正则表达式对象,对应的函数功能与re模块类似,返回re.MatchObject对象

函数声明 功能 备注

search(string[,pos[,endpos]])

  pos和endpos可不写

match(string[,pos[,endpos]])

   

 split(string, maxsplit=0)

   

findall(string[,pos[,endpos]])

   

finditer(string,[,pos[,endpos]]) 

   

sub(repl, string, count=0)

   

groups

模式中子组的个数  

groupindex

返回组名字与(?P<id>)定义组顺序的映射字典

 

pattern

模式串

 

 3. re.MatchObject类:匹配结果类

函数声明 功能 备注

group(index1, index2,...)

返回匹配结果组

index指出要返回结果组的下标,默认为0,

把所有结果写成串。若有多个,以元组形式返回

groups()

返回所有子组的元组  

groupdict()

把所有命名的子组以字典形式返回  

start([group]) 

end([group])

返回子组(用名字或下标标识)

在串中匹配成功开始/结果的位置

 

startpos  endpos

传递给search和match函数时

指定的开始/结束匹配串的位置

 

lastindex  lastgroup

最后匹配成功的组的下标/名字  如果没有的话,返回None   

re

匹配时用的正则表达式对象  
string 传递给match/search函数的串  
posted @ 2017-06-03 11:12  huapyuan  阅读(464)  评论(0编辑  收藏  举报